二叉树(二):三种遍历的非递归实现
来源:互联网 发布:手机怎么投诉淘宝店铺 编辑:程序博客网 时间:2024/05/17 01:22
本文要点:
二叉树三种遍历方式(前序、中序、后序)的非递归实现
ps:递归方法实现:递归法实现二叉树的创建与遍历
非递归的实现需要借助栈!!
前序:
首先需要判断是否是空树,是空返回;否则从根部一直向树的左子树方遍历,遍历一个访问一个,并且将其压入栈。当树不为空,并且栈不为空时,说明栈里仍有元素可访问。
void _PrevOrder_NonR(Node* root)//非递归--前序{if(root == NULL)return ;Node* cur = root;stack<Node*> s;while (cur || !s.empty())//cur != NULL说明仍然有子树可以被遍历//!s.empty() 说明栈不为空时可以有数据被访问{while (cur){cout<<cur->_data<<" ";s.push(cur);cur = cur->_left;}Node* top = s.top();s.pop();cur = top->_right;//访问当前根节点的右子树}cout<<endl;}中序:
中序的过程与前序相似,只是访问数据的时间不同。中序是先入栈再访问,即当左子树入栈以后才访问
void _InOrder_N0nR(Node* root)//非递归--中序{if(root == NULL)return ;Node* cur = root;stack<Node*> s;while(cur || !s.empty()){while(cur){s.push(cur);cur = cur->_left;}Node* top = s.top();//此时栈顶存的是当前子树的根节点cout<<top->_data<<" ";s.pop();cur = top->_right;//将右子树作为左子树的子树来遍历}cout<<endl;}后序:
三种非递归遍历中,后序遍历是比较难理解的。后序遍历必须保证左子树和右子树都访问完以后才能访问根节点,而能访问根节点的可能是有两种:右子树已经被访问或者当前根节点的右子树为NULL。因此,就需要一个标记位pos,当当前根节点右子树和pos相等时,说明已经可以访问该根节点了。
void _PostOrder_NonR(Node* root)//非递归--后序{Node* cur = root;Node* pos = root;stack<Node*> s;while (cur || !s.empty()){while (cur){s.push(cur);cur = cur->_left;}Node* top = s.top();if (top->_right == NULL || top->_right == pos)//top存的是当前的根节点,当top的右子树为空或者top的右子树为pos,说明右子树已经遍历过,//这时就可以访问当前的根节点了{cout<<top->_data<<" ";pos = top;s.pop();}else{cur = top->_right;}}cout<<endl;}
0 0
- 二叉树(二):三种遍历的非递归实现
- 二叉树(二)——三种遍历算法的非递归实现(java版)
- 二叉树的三种遍历的非递归实现
- 二叉树的三种遍历的非递归实现
- 二叉树的三种遍历(递归+非递归)
- 三种二叉树遍历的非递归实现
- 二叉树的三种遍历非递归实现
- 二叉树的三种遍历方式(递归与非递归详细实现)
- 二叉树的三种递归遍历与非递归遍历-C++实现
- 二叉树的三种遍历方式的递归实现和非递归实现
- 二叉树的遍历(递归实现+非递归实现)
- 二叉树的三种遍历方式(递归和非递归的实现方法)
- 二叉树的三种遍历方式的递归与非递归实现
- 二叉树的三种遍历方式(递归、非递归和Morris遍历)
- 43 递归和非递归俩种方法实现二叉树的三种遍历
- java使用递归,非递归方式实现二叉树的三种常见遍历方式
- java使用递归,非递归方式实现二叉树的三种常见遍历方式
- 二叉树的遍历(递归,非递归)实现
- 彪悍开源的分析数据库-ClickHouse
- 僵尸进程与孤儿进程
- yum在线安装tomcat6 详解
- 【神经网络与深度学习】Caffe Model Zoo许多训练好的caffemodel
- Android 签名有什么用?
- 二叉树(二):三种遍历的非递归实现
- 虚拟机VMware下安装Ubuntu
- 文本聚类总结
- Python——循环
- 心若在,梦就在
- 解决Select2控件不能在jQuery UI Dialog中不能搜索的bug
- 8天学通MongoDB——第四天 索引操作
- makefile的命令包定义及使用
- Wince平台软件打包