非递归实现二叉树三种遍历
2016-11-16 19:41
323 查看
#include <cstdio> #include <cstdlib> #include <stack> using namespace std; typedef char ElementType; typedef struct TreeNode* BinTree; struct TreeNode { ElementType Data; BinTree lchild; BinTree rchild; }; void createBinTree(BinTree &T) { char ch; scanf("%c",&ch); if(ch == '0')T = NULL; else { if(!(T = (TreeNode*)malloc(sizeof(TreeNode))))return; T->Data = ch; createBinTree(T->lchild); createBinTree(T->rchild); } } //非递归先序 void PreOrderTraversal(BinTree BT) { BinTree T; stack<BinTree> s; T = BT; while(T || !s.empty()) { while(T) { s.push(T); printf("%5c",T->Data); T = T->lchild; } if(!s.empty()) { T = s.top(); s.pop(); T = T->rchild; } } } //非递归中序 void InOrderTraversal(BinTree BT) { BinTree T; stack<BinTree> s; T = BT; while(T || !s.empty()) { while(T) { s.push(T); T = T->lchild; } if(!s.empty()) { T = s.top(); s.pop(); printf("%5c",T->Data); T = T->rchild; } } } //非递归后序 void PostOrderTraversal(BinTree BT) { BinTree T; T = BT; stack<BinTree> s; stack<BinTree> q; while(T || !s.empty()) { while(T) { s.push(T); q.push(T); T = T->rchild; } if(!s.empty()) { T = s.top(); s.pop(); T = T->lchild; } } //逆向输出堆栈Q中的元素 while(!q.empty()) { T = q.top(); q.pop(); printf("%5c",T->Data); } } int main() { BinTree T; createBinTree(T); PreOrderTraversal(T); printf("\n"); InOrderTraversal(T); printf("\n"); PostOrderTraversal(T); return 0; }
相关文章推荐
- 二叉树三种遍历非递归实现
- 二叉树三种遍历递归及非递归实现
- 二叉树三种遍历递归及非递归实现(Java)
- 二叉树的创建、相关操作、递归和非递归式实现三种遍历
- 二叉树的三种遍历的非递归实现
- 二叉树的三种遍历方式的递归实现和非递归实现
- 二叉树三种遍历方式的递归和循环实现
- 二叉树三种遍历算法的递归和非递归实现(C++)
- 二叉树三种遍历(递归以及非递归实现)
- java使用递归,非递归方式实现二叉树的三种常见遍历方式
- 二叉树(一):二叉树的创建以及三种遍历方法的递归实现
- 用非递归方式实现二叉树的前、中、后三种遍历方法
- 二叉树的三种遍历方式的循环和递归的实现方式
- 二叉树三种遍历算法递归和非递归实现
- 二叉树三种遍历的非递归实现
- 二叉树三种遍历(递归以及非递归实现)
- 二叉树(二):三种遍历的非递归实现
- C++实现二叉树的建立和三种递归遍历
- 二叉树的前序、中序、后序三种遍历的六种实现方式(递归、非递归)(C++)
- 二叉树的三种遍历非递归实现