二叉树的非递归遍历
来源:互联网 发布:车载安卓版电子狗软件 编辑:程序博客网 时间:2024/04/29 20:37
二叉树的非递归遍历
经过上网查找和深思熟虑,总结了比较容易理解的方法.参考:http://blog.csdn.net/algorithm_only/article/details/6976249
非递归先序
根结点先进栈,访问结点值,左孩子依次进栈,直到最左的孩子进栈。然后栈顶指针出栈,退至上一层,然后访问右子树,右子树访问完成之后,退至上一层,直至栈空,节点访问完成。先序遍历访问结点值是在结点进栈时。理解此算法最好找一棵简单的树跟着程序走一遍,在纸上画出栈的进栈、出栈情况。
void printTreePreOrder2(BinaryNode *t) const {stack<BinaryNode*> stackNode;BinaryNode *pnode = t;while(pnode != NULL || !stackNode.empty()){while (pnode != NULL){cout << pnode->element << " ";stackNode.push(pnode);pnode = pnode->left;}if(!stackNode.empty()){pnode = stackNode.top();stackNode.pop();pnode = pnode->right;}}}
非递归 中序
中序遍历和先序遍历类似,只是访问结点值是在出栈的时候,而先序遍历是在进栈的时候。
void printTreeInorder2(BinaryNode *t) const{stack<BinaryNode*> stackNode;BinaryNode *pnode = t;while(pnode != NULL || !stackNode.empty()){while(pnode != NULL){stackNode.push(pnode);pnode = pnode->left;}if(!stackNode.empty()){pnode = stackNode.top();cout << pnode->element << " ";stackNode.pop();pnode= pnode->right;}}}
非递归后序
后序遍历
void printTreePostOrder3(BinaryNode *t) const{BinaryNode *p = t;BinaryNode *temp = NULL;BinaryNode *pre = NULL;if (p == NULL){cout << "empty " << endl;}stack<BinaryNode*> s;while(p != NULL || !s.empty()){while (p != NULL){s.push(p);p = p->left;}if (!s.empty()){temp = s.top();if(temp->right == NULL || temp->right == pre) //若果没有 右子叶或者 右子叶已经访问过{cout << temp->element << " ";s.pop();pre = temp;p = NULL;}else{p = temp->right;}}}}
和先序、中序类似,但要稍复杂一点,需要判断结点是否有右孩子和右孩子是否访问过。
0 0
- 二叉树的递归,非递归遍历
- 二叉树的递归+非递归遍历
- 二叉树的递归非递归遍历
- 二叉树的遍历--递归+非递归
- 二叉树的递归、非递归遍历
- 二叉树的递归非递归遍历
- 二叉树的先中后序遍历,递归遍历,非递归遍历
- 二叉树的递归遍历与非递归遍历
- 二叉树的创建,递归遍历,非递归遍历
- 二叉树的递归遍历与非递归遍历
- 二叉树的非递归遍历以及递归遍历
- 二叉树的非递归遍历&递归遍历
- 二叉树的递归遍历和非递归遍历
- 二叉树的递归遍历与非递归遍历
- 二叉树的递归遍历和非递归遍历
- 二叉树的构造,递归遍历,非递归遍历
- 二叉树的遍历(递归+非递归+层次遍历)
- 二叉树的递归遍历与非递归遍历
- 生产库案例网址搜罗
- 共享内存mmap()和CreateFileMapping()
- Linq to Entity 增,删,改,查 语句
- 龟苗的养殖[乌龟][龟秀]
- Java虚拟机学习 - 垃圾收集算法
- 二叉树的非递归遍历
- android自定义标题栏
- java 获取Properties文件值
- Android数据读取之Sqlite数据库操作
- iOS学习日记1 @class #import#include
- [转载] STL 之 priority_queue 优先级队列
- Windows 下串口编程
- 判断windows系统版本号
- jQuery - AJAX get() 和 post() 方法