二叉树遍历算法的非递归实现
时间:2020-07-11
本文章向大家介绍二叉树遍历算法的非递归实现,主要包括二叉树遍历算法的非递归实现使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
- 前序遍历的非递归实现
- 中序遍历的非递归实现
1 void InOrder2(BTNode *root) { 2 BTNode *p = root; 3 stack<BTNode *> S; 4 while (p != NULL || !S.empty()) { 5 if (p) { // 找到树中最左边的那个结点,并将路径中经过的结点依次压入栈中 6 S.push(p); 7 p = p->left; 8 } else { // 如果该节点为空则输出其双亲结点 9 S.pop(); 10 p = S.top(); 11 cout << p->val << " "; 12 p = p->right; // 访问双亲结点的右孩子 13 } 14 } 15 }
- 后序遍历的非递归实现
1 #include <bits/stdc++.h> 2 3 using namespace std; 4 5 const int maxsize = 1005; 6 7 typedef struct BTNode { 8 int val; 9 BTNode *left; 10 BTNode *right; 11 }; 12 13 typedef struct { 14 BTNode *p; 15 int revisited; 16 } SNode; 17 18 void PostOrder2(BTNode *root) { 19 SNode sn; 20 BTNode *pt = root; 21 stack<SNode> S; 22 while (pt) { 23 S.push({pt, 0}); 24 pt = pt->left; 25 } 26 while (!S.empty()) { 27 sn = S.top(); 28 if (sn.p->right == NULL || sn.revisited == 1) { 29 S.pop(); 30 cout << pt->val << " "; 31 } else { 32 sn.revisited = 1; 33 pt = sn.p->right; 34 while (pt != NULL) { 35 S.push({pt, 0}); 36 pt = pt->left; 37 } 38 } 39 } 40 }
原文地址:https://www.cnblogs.com/ruruozhenhao/p/13284822.html
- kvm虚拟化管理平台WebVirtMgr部署-完整记录(2)
- objective-C中的扩展方法与partial class
- 仿优酷Android客户端图片左右滑动(自动滑动)
- objective-C: NSString应该用initWithFormat? 还是 stringWithFormat?
- objective-C 的内存管理之-实例分析
- Tim Berners-Lee:网络的自由和开放
- android防止内存溢出浅析
- objective-C 的内存管理之-自动释放池(autorelease pool)
- objective-C 的内存管理之-引用计数
- CompoundButton.OnCheckedChangeListener与RadioGroup.OnCheckedChangeListener冲突
- Liora Rosin & Golan Levi:在北京驾车看洛杉矶的落日
- iphone/ipad/itouch进入DFU模式最简单的操作办法
- 微信小程序for循环里条件判断
- objective-C 的OOP(下)-类(static)方法、实例方法、overwrite(覆写)、属性(property)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法