试利用栈的基本操作写出先序遍历二叉树的非递归形式的算法

news2024/12/23 10:30:42

试利用栈的基本操作写出先序遍历二叉树的非递归形式的算法

代码思路:
要用栈解决先序遍历,我们首先要知道栈的性质和二叉树先序遍历的规则

栈最基本的就是先进后出

而二叉树先序遍历就是“根左右”

利用这两个性质,我们可以先将根结点入队。
接下来,只要栈不空,我们就出栈一个元素,然后先入右孩子,再入左孩子
(因为栈是先进后出,那我们遍历完根结点之后下一个是左孩子,然后才是右孩子。所以先让右孩子进,再让左孩子进,这样出来的顺序就是我们要的先左后右了)

举例说明:
在这里插入图片描述

代码如下:

typedef struct BiTNode{//二叉树定义
	char data;
	BiTNode* lchild;
	BiTNode* rchild;
}BiTNode,*BiTree;

//栈用到的基本操作
void InitStack(SqStack* s);
int Push(SqStack* s,BiTree e);
void Pop(SqStack* s,BiTree* e);
int StackEmpty(SqStack s);

//二叉树的非递归前序遍历
void PreOrderTraverseNR	(BiTree T){
	SqStack s;//声明一个栈s
	InitStack(&s);//初始化一下
	Push(&s,T);//根节点入栈
	while(!StackEmpty(s)){
		BiTree p;//用于一会记录出栈结点
		Pop(&s,&p);
		printf("%c",p->data);
		//先入右孩子再入左孩子
		//后面出栈的顺序就是:先左后右
		if(p->rchild){//右孩子不是NULL,入栈
			Push(&s,p->rchild);
		}
		if(p->lchild){
			Push(&s,p->lchild);
		}
	}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1174476.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【软件测试】其实远远不止需求文档这么简单

我们都知道,软件测试是一门依赖性很强的综合技术,软件测试工程师在施行自己的工作时,总是要依赖其他团队的产出。 比如,我们要依赖着需求团队给出的需求分析说明书来确定测试的方向,又要依赖开发团队产出的实际代码产品…

JavaScript_Date对象_实例方法_get类

计算这一年还剩多少天&#xff1a; <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <title>Document&…

oracle-sql语句执行过程

客户端输入sql语句。 sql语句通过网络到达数据库实例。 服务器进程(server process)接收到sql语句。 sql – 解析成执行计划&#xff0c;然后sql才能执行。 会将sql和sql的执行计划缓存到共享池中。解析: 会消耗很多资源。 从数据库找数据&#xff0c;先从buffer cache中找&a…

自定义注解格式化处理BigDecimal

目录 一、场景描述 二、实现步骤 1、自定义类 2、使用注解 3、测试 一、场景描述 在开发过程中&#xff0c;如果有实体类的属性中存在BigDecimal的属性&#xff0c;并且需要对其进行校验&#xff0c;例如&#xff1a;限制BigDecimal的小数点位数是两位。但目前没有注解可以…

第六章 块为结构建模 P1|系统建模语言SysML实用指南学习

仅供个人学习记录 概述 块是SysML结构中的模块单元&#xff0c;用于定义一类系统、部件、部件互连&#xff0c;或者是流经系统的项&#xff0c;也用于定义外部实体、概念实体或其他逻辑抽象 块定义图用于定义块以及块之间的相互关系&#xff0c;如层级关系&#xff0c;也用于…

搭建WAMP网站教程(windows+apache+mysql+php)

之前为了学习网络安全&#xff0c;从搭建网站学起&#xff0c;对网站运行有个初步的了解。 今天翻到了之前的笔记&#xff0c;顺手发到csdn上了。 搭建网站步骤 一、Apache 安装Apache&#xff0c;下载Apache之后把Apache解压&#xff0c;此处解压到C:\目录下 2.然后要记得安…

pg14-sql基础(三)-分组统计

分组 SELECT hire_date, COUNT(*) FROM employees GROUP BY hire_date;SELECT extract(year from hire_date), COUNT(*) FROM employees GROUP BY extract(year from hire_date); -- GROUP BY 1;SELECT extract(year from hire_date), department_id, COUNT(*) FROM employees…

MFC 基础篇(一)

目录 一.SDK编程 二.为什么要学MFC&#xff1f; 三.MFC能做什么&#xff1f; 四.MFC开发环境搭建 五.MFC项目创建 六.消息映射机制 一.SDK编程 Application Programming Interface 应用程序编程接口。 Software Development Kit 软件开发工具包&#xff0c;一般会包括A…

自动化测试之争:code vs codeless

在TesterHome看到的一个话题&#xff0c;当我们选择做自动化时是否需要code 或者codeless。 code方案 用code去做自动化&#xff0c;实现过程就是拿个IDE撸代码。 python pytest/unittest appium/selenium/requests ... Java Junit/testNG appium/selenium/requests .…

volatile-无原子性案例详解

package com.nanjing.gulimall.zhouyimo.controller;import java.util.concurrent.TimeUnit;/*** author zhou* version 1.0* date 2023/11/5 7:56 下午*/ class MyNumber{int number;public synchronized void add(){number;} } public class VolatileNoAtomicDemo {public st…

git进阶

1、git&#xff1a;为分布式版本控制工具 2、 当新创建一个文件后&#xff0c;文件通过指令可以到达暂存区&#xff0c;暂存区是仓库和工作区的缓冲区域 当commit后&#xff0c;会把文件放入本地仓库&#xff0c;每一次commit都会创建一个版本 《小区域》 git status 《查看…

python- 学生信息管理系统

偶然整的学生信息管理系统一个学生信息管理系统&#xff0c;包括录入学生信息、查找学生信息、删除学生信息、修改学生信息、排序学生信息、统计学生总数和显示所有学生信息等功能 开发环境要求本系统的软件开发及运行环境具体如下。 操作系统&#xff1a;Windows 10。 Python…

知乎日报第三周总结

这周主要完成了评论的加载和长评论的展开与收起&#xff0c;同时完善了前面的内容&#xff0c;文章内容cell的滑动刷新改为滑动一个加载一个&#xff0c;这样就更加流畅&#xff1b;还有就是首次点击只先加载当前cell内容&#xff0c;这样就不会卡顿加载过多内容&#xff0c;剩…

MySQL(9):子查询

子查询 指一个查询语句嵌套在另一个查询语句内部的查询&#xff0c;这个特性从MySQL 4.1开始引入。 SQL 中子查询的使用大大增强了 SELECT 查询的能力&#xff0c;因为很多时候查询需要从结果集中获取数据&#xff0c;或者需要从同一个表中先计算得出一个数据结果&#xff0c;…

python学习10

前言&#xff1a;相信看到这篇文章的小伙伴都或多或少有一些编程基础&#xff0c;懂得一些linux的基本命令了吧&#xff0c;本篇文章将带领大家服务器如何部署一个使用django框架开发的一个网站进行云服务器端的部署。 文章使用到的的工具 Python&#xff1a;一种编程语言&…

Mybatis技术原理详解之:使用Mapper形式和注解驱动的复杂映射开发

Mybatis技术原理详解之&#xff1a;使用Mapper形式和注解驱动的复杂映射开发 Mapper形式的复杂映射开发 一对一查询 一对一查询的模型 ⽤户表和订单表的关系为&#xff0c;⼀个⽤户有多个订单&#xff0c;⼀个订单只从属于⼀个⽤户 ⼀对⼀查询的需求&#xff1a;查询⼀个订…

AFL入门教学

1、AFL简介 AFL&#xff08;American Fuzzy Lop&#xff09;是一个面向安全的模糊测试工具&#xff0c;它使用了一个新的编译时插桩技术和遗传算法&#xff0c;可以自动发现触发目标二进程程序的测试用例&#xff0c;从而大大提高测试代码的功能覆盖率。 AFL官网&#xff1a;…

090基于web+springboot的中小企业设备管理系统

欢迎大家关注&#xff0c;一起好好学习&#xff0c;天天向上 文章目录 一项目简介技术介绍 二、功能组成三、效果图四、 文章目录 一项目简介 本中小企业设备管理系统管理员有个人中心&#xff0c;用户管理&#xff0c;员工管理&#xff0c;设备信息管理&#xff0c;配件信息管…

计算机报错找不到msvcp110.dll无法继续执行代码怎么解决?

msvcp110.dll文件丢失是一个相当常见的问题&#xff0c;尤其是在运行某些程序或游戏时。这个问题可能会导致程序无法正常运行&#xff0c;甚至可能导致系统崩溃。那么&#xff0c;面对这样的问题&#xff0c;我们应该如何来解决呢&#xff1f;下面&#xff0c;我将分享我解决问…

LabVIEW开发实时离子温度测量

LabVIEW开发实时离子温度测量 迈向核聚变发电的漫长旅程&#xff0c;旨在提供无限的清洁能源。离子温度是产生聚变点火条件中最重要的参数之一&#xff0c;快速简单地测量离子温度的技术至关重要。特别是对于未来的聚变反应堆来说&#xff0c;需要一种使用等离子体发出的物理现…