二叉树--实现二叉树的前序/中序/后序非递归遍历。
来源:互联网 发布:阿儿法营编程学校 编辑:程序博客网 时间:2024/06/05 15:26
思路:都用到栈,用栈来存储结点
//先序非递归,根左右,循环处理,先打印根再压左子树,再压右子树void PreOrder_Nor(BinaryTreeNode<T>* pRoot){ if(pRoot == NULL) return ; stack<BinaryTreeNode<T>*> s; s.push(pRoot); while(!s.empty()) { BinaryTreeNode<T>* pCur = s.top(); cout<<pCur -> data << " "; s.pop(); if(pCur -> left) s.push(pCur->left); if(pCur -> right) s.push(pCur -> right); }}
//中序非递归,左根右,一样是循环,这次要一直压入左,然后逐个向上遍历根和右void InOrder_Nor(BinaryTreeNode<T>* pRoot){ if(pRoot == NULL) return ; stack<BinaryTreeNode<T>*>s; BinaryTreeNode<T>* pCur = pRoot; while(pCur != NULL || !s.empty() ) { while(pCur) { s.push(pCur); pCur = pCur -> left; } BinaryTreeNode<T>* pTop = s.top(); cout<< pTop -> data << " "; s.pop(); pCur = pTop -> right; }}
//后序遍历非递归//左右根,当右为空或者右子树遍历完的时候才会遍历根节点,所以这里需要新给一个pRev结点。void PostOrder_Nor(BinaryTreeNode<T>* pRoot){ if(pRoot == NULL) return ; stack<BinaryTreeNode<T>*>s; BinaryTreeNode<T>* pRev = NULL; BinaryTreeNode<T>* pCur = pRoot; while(NULL != pCur || !s.empty()) { while(pCur) { s.push(pCur); pCur = pCur -> left; } BinaryTreeNode<T>* pTop = s.top(); if(pTop -> right == NULL || pTop -> right == pRev) { cout<<pTop->data<< " "; pRev = pTop; s.pop(); } else pCur = pTop -> right; }}
阅读全文
0 0
- 二叉树--实现二叉树的前序/中序/后序非递归遍历。
- 二叉树的前序、中序、后序非递归遍历
- 二叉树的中序,前序,后序非递归遍历
- 【二叉树】实现二叉树的前序、中序、后序的非递归遍历
- leetcode | 二叉树的前序遍历、中序遍历、后续遍历的非递归实现
- 非递归实现二叉树的后序遍历、前序遍历、中序遍历
- 二叉树非递归前、中、后序遍历实现
- 二叉树的遍历;前序 中序 后序遍历二叉树;递归 非递归实现; 重建二叉树;编程之美重建二叉树
- 实现二叉树的前序/中序/后序非递归遍历——题集(十一)
- 每日一题之实现二叉树的前序/中序/后序非递归遍历
- 数据结构/实现二叉树的前序/中序/后序非递归遍历
- 【基础题】--实现二叉树的前序 / 中序 / 后序非递归遍历
- 二叉树 前序遍历的非递归实现 中序遍历的非递归实现 后序遍历的非递归实现 创建二叉树
- 二叉树的前序遍历---非递归实现
- 二叉树的前序、中序、后序遍历 递归非递归实现
- 二叉树的前序、中序、后序(递归、非递归)遍历java实现
- 二叉树的前序,中序,后序遍历(递归非递归实现)
- 实现二叉树的前序/中序/后序递归、非递归遍历
- Windows中遇到不能创建 . 开头必须键入文件名
- 基因的富集分析
- OpenCV打开 内存buf中的图片
- 快速幂取模 (位优化)
- 感悟
- 二叉树--实现二叉树的前序/中序/后序非递归遍历。
- Libevent源码分析-----连接监听器evconnlistener
- Guava学习记录
- NodeVisitor
- js获取当前时间并存到数据中
- C#关于委托的那些事儿
- VC++ 中LoadLibrary的路径问题
- Comparing system calls and C libraries
- 棋盘问题