先序遍历二叉树的几种算法
/*算法1:递归算法
优点:代码量少,定义过程清晰,理解较易
缺点:1)一些语言不支持递归机制
2)递归执行效率较低
*/
//先序遍历的递归算法
Status PreOrderTraverse(BiTree T,Status (*visit)(TElemType e)){if(!T) return OK;//出口条件,T指针为空else{if(visit(T->data))//访问根结点if(PreOrderTraverse(T->lchild,visit))//遍历左子树if(PreOrderTraverse(T->rchild,visit)) return OK; //遍历右子树return ERROR; //若三条件任意一条不满足则返回ERROR}
}
/*算法2:非递归算法(一)
优点:代码执行效率较高
缺点:代码量较多,且较之递归,较难理解
*/
//先序遍历的非递归算法1(利用栈结构先进后出的特点)
Status PreorderTraverse(BiTree T,Status(*visit)(TElemType e)){ if(!T) return OK;BiTree p=T;SqStack S;Initstack(&S);Push(&S,p);while(!StackEmpty(S)){Pop(&S,&p);if(!visit(p->data)) return ERROR;//访问女根结点if(p->rchild) Push(&S,p->rchild);//右子树入栈if(p->lchild) Push(&S,p->lchild);//左子树入栈}return OK;
}
/*算法3:非递归算法(二)
*/
//先序遍历的非递归算法2
Status InorderTraverse(BiTree T,Status(*visit)(TElemType e)){if(!T) return OK;BiTree p=T;SqStack S;Initstack(&S);//栈的初始化while(p||!StackEmpty(S)){if(p){ if(!visit(p->data)) return ERROR;//只访问,不要删掉该结点访问记录,以便找到其右孩子 p=p->lchild;}else{Pop(&S,&p);只有左子树遍历完才能将其根结点出栈,以便找到其右子树,p=p->rchild;}}return OK;
}
/*算法4:除以上三种方法之外,无栈非递归算法也是一类重要算法,值得注意的是,不采用栈结构来储存需要的结点信息,则需要在定义结点结构时,除data数据域之外,定义指向双亲的结点,指向孩子的结点,同时,还需要用一个标志域指示该结点到达的次数,以便选择到达该结点后的操作(次数不同,操作也不相同)
*/
先序遍历二叉树的几种算法相关推荐
- 非递归先序遍历二叉树总结(3种方法)
算法 非递归先序遍历二叉树总结(3种方法) @author:Jingdai @date:2020.12.03 传送门 非递归中序遍历二叉树 非递归后序遍历二叉树 递归先序遍历二叉树非常的简单,但是面试 ...
- 非递归后序遍历二叉树总结(2种方法)
算法 非递归后序遍历二叉树总结(2种方法) @author:Jingdai @date:2020.12.04 传送门 非递归先序遍历二叉树 非递归中序遍历二叉树 方法1 非递归用栈来辅助遍历,后序遍历 ...
- 非递归中序遍历二叉树总结(2种方法)
算法 非递归中序遍历二叉树总结(2种方法) @author:Jingdai @date:2020.12.03 传送门 非递归先序遍历二叉树 非递归后序遍历二叉树 方法1 先序遍历是第一次遇到该节点遍历 ...
- 二叉树的后序遍历的非递归实现算法
算法思想: 后序遍历二叉树的顺序是左右根.我们需要用一个辅助栈来记录没有访问过得祖宗节点. 借助一个简单的二叉树模拟一下过程. 后序遍历的顺序是DEBFGCA 算法步骤 1.沿着根的左孩子,依次入栈, ...
- (※)中序遍历二叉树的非递归算法
在此之前,我们已经学习了中序遍历二叉树的递归算法,相信大家已经将其牢牢掌握了. 除了使用递归思想作为求解问题的钥匙,还可以借助栈来以非递归方式实现该问题的求解. 首先,我们要讨论存储二叉树结点信息的栈 ...
- 数据结构-----后序遍历二叉树非递归算法(利用堆栈实现)
一.非递归后序遍历算法思想 后序遍历的非递归算法中节点的进栈次数是两个,即每个节点都要进栈两次,第二次退栈的时候才访问节点. 第一次进栈时,在遍历左子树的过程中将"根"节点进栈,待 ...
- 非递归先、中、后序遍历二叉树(C语言)
文章目录 前言 一.二叉树非递归遍历算法 1.先序遍历 2.中序遍历 3.后序遍历 二.完整程序 三.运行结果实例 前言 本程序采用C语言编写,栈和二叉树的基本操作函数基于严蔚敏老师的<数据结构 ...
- 一文搞懂---先序遍历二叉树(内含完整实现代码)
如何用代码实现先序遍历二叉树(C语言) 想必有很多小伙伴和我一样,最开始的时候在网上或者是书上看了一系列有关于二叉树的遍历原理以及递归.非递归的实现方法,但是奈何书中也只是给出了伪代码之类的,并没有一 ...
- 数据结构 非递归实现中序遍历二叉树
参考书籍:c++ 数据结构 之前提到用递归的方法实现中序遍历二叉树,但是递归会浪费大量的空间与时间.这时候我们就在想用没有一种方式能够不依赖递归去实现遍历二叉树.我们之前学过一种数据结构可以实现这种方 ...
最新文章
- ​GPLinker:基于GlobalPointer的实体关系联合抽取
- Centos 开放端口
- 开机慢 不换SSD如何提升Windows 10开机速度
- 牛客网_PAT乙级_1031. 查验身份证(15)【class new一个数组】
- arouter跨module传递消息_利用ARouter实现组件间通信,解决子模块调用主模块问题...
- Linux 和 Vim 常用命令整理
- 前端学习(3225):字符串形式
- vue中rules校验是验证首字符_小白也能秒懂Vue源码中那些精细设计(选项处理)...
- adb 静默安装_Android静默安装的实现方案(一)
- AutoCAD Civil 3D 2012正式发布
- 代码女神利用Python网络爬虫爬取淘宝评论区数据(用小本本记下来)
- 一次失败的华为校园大使面试经历
- cobalt strick 4.0 系列教程 (5)--- 获取立足点
- 罗振宇2021跨年演讲5:为什么你要建成自己的“黄鹤楼”?
- 阿里云服务器部署学习笔记
- 如何解决:error: failed to push some refs to
- MySQL学习笔记数据库学习【二】
- NTP DDoS反射放大攻击实验
- Vue3通过axios来读取本地json文件
- i5 12400f和i3 12100f性能对比