二叉树非递归后序遍历算法
与正常的非递归中序遍历算法不同于两点:
一 比正常的中序遍历算法多了对数据元素的标记。
在压数据元素入栈(标记记为0,用来表示访问了其左子树)时标记,
还有访问完左子树利用gettop()获取双亲通过p=p->rchild进一步访问右子树(标记为1,表示访问了该数据元素的
右子树)时标记。
二 在访问完左子树时,中序遍历会pop出该元素,利用pop出数据访问右子树。而后序遍历在遍历完右子树之后才会pop
出该元素,并访问其数据,中间的过程是利用getTop函数实现的
void postOrderNoRe(BiTree T) //后续遍历非递归算法
{BiTree p;Stack *st;initstack(st);p=T;int Tag[20]; //栈,用于标识从左(0)或右(1)返回 while (p!=NULL || !isempty(st)){while (p!=NULL){push(st,p);Tag[st->top]=0;p=p->lchild;}while (!isempty(st)&&Tag[st->top]==1){//注意这里使用的是while,也就是说不停循环把栈里连续标记为1的节点都输出来//通过上面的函数访问完右子树之后才会访问该节点的数据//所以这个输出函数必须放在这里,下面的函数用来由访问左子树转//为访问其右子树。而上面的函数用来判断右子树是否访问结束p=pop(st);cout<<p->data<<" ";}if (!isempty(st)){p=gettop(st);p=p->rchild;Tag[st->top]=1; //设置标记右子树已经访问 }else break;}
}
二叉树非递归后序遍历算法相关推荐
- 二叉树非递归后序遍历算法(C语言)
二叉树非递归后序遍历算法(C语言) 二叉树后序遍历的规律:左右根 后序非递归遍历中,访问根(子根)结点有两种情况 ①:遍历完左子树,需要遍历右子树,需要从栈中访问最顶上的根(子根)结点从而得到右子树的 ...
- 二叉树非递归后序遍历算法的一种简单思路
首先从简单的例子开始 1 2 3 上图二叉树的后序遍历序列是"231", 颠倒一下就是"132", 而其前序遍历是"123" 有什么发现? ...
- 二叉树非递归后序遍历
/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *rig ...
- 二叉树非递归后序遍历的三种办法
方法一: 双栈,利用生成先序序列思路,左--右依次入栈再出栈,得到头--右--左的序列,再将该序列入另一栈再出栈,得到左--右--头序列: void PostOrder_1(Bitree *T) {T ...
- 非递归后序遍历二叉树总结(2种方法)
算法 非递归后序遍历二叉树总结(2种方法) @author:Jingdai @date:2020.12.04 传送门 非递归先序遍历二叉树 非递归中序遍历二叉树 方法1 非递归用栈来辅助遍历,后序遍历 ...
- 二叉树路径应用举例(基于非递归后序遍历)
#include "stdafx.h" #include <iostream> #include <fstream>using namespace std; ...
- 二叉树的非递归后序遍历(双栈法和双指针法,有图有真相)
一,前言 本文是原创作品,可能存在不足,欢迎大家指正,礼貌交流,感激不尽. 二,思路 二叉树后序遍历不同于前序遍历和中序遍历,后序遍历是三者之间最难的.下面就让我们来梳理一下代码的逻辑,看看如何轻松地 ...
- 二叉树非递归先序遍历
二叉树的递归先序遍历很简单,假设二叉树的结点定义如下: 1 struct BinaryTreeNode 2 { 3 int m_nValue; 4 BinaryTreeNode* m_pLeft; 5 ...
- 二叉树非递归后序(后根)遍历
1.要求 使用非递归方式对二叉树进行(后序)后根遍历. 2.思路 使用先序(先根)遍历,然后将遍历的结果反过来.但要注意:无论是先根遍历还是后根遍历,左子树的遍历始终在右子树之前,所以要使先根遍历结果 ...
最新文章
- 【Datawhale-Python】Task1
- 国产嵌入式操作系统发展思考
- python内置装饰器property_python之内置装饰器(property/staticmethod/classmethod)
- python opencv pdf脚本之家_OpenCV 3和Qt5计算机视觉应用开发 PDF 影印含源码版
- 5.Ray-Handler之ToReadHandler编写
- 老程序员如何避免沦落出局?
- 图解使用Win8Api进行Metro风格的程序开发十二----上下文菜单
- 【数据结构笔记01】什么是数据结构
- python的格式化输入_如何在python中读取格式化的输入?
- JAVA 生成API接口文档
- 企业管理系统有几种类型,分别是什么?
- 如何添加CDN加速域名
- 我爱淘冲刺阶段站立会议每天任务1
- Maven--setting详解
- English - because of,due to ,thanks to ,owing to ,as a result of ,on account of解析
- 计算机更新后启动不了,win10系统更新显卡之后开不了机如何解决
- oracle时间查询语句
- STM32L0系列之【串口收发】
- 科学教育类毕业论文文献都有哪些?
- 机器人参加高考还拿高分,究竟怎么做到的?