非递归实现二叉树三种遍历
来源:互联网 发布:宿迁网络问政如何投诉 编辑:程序博客网 时间:2024/05/08 01:55
#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;}
1 0
- 二叉树三种遍历非递归实现
- 非递归实现二叉树三种遍历
- 二叉树三种遍历方式的递归与非递归实现
- 二叉树三种遍历方式 递归与非递归实现
- 二叉树三种遍历方式 递归与非递归实现 总结
- 二叉树三种遍历(递归以及非递归实现)
- 二叉树三种遍历(递归及非递归)的实现
- 二叉树三种遍历算法递归和非递归实现
- 二叉树三种遍历递归及非递归实现
- 二叉树三种遍历方法的递归与非递归实现
- 二叉树三种遍历非递归实现【每日一题】
- 二叉树遍历非递归实现
- 二叉树遍历非递归实现
- 非递归实现二叉树的遍历
- 二叉树遍历 非递归 C++实现
- 二叉树后序遍历非递归实现
- 非递归实现二叉树的遍历
- 二叉树遍历非递归实现
- foreach
- 线性表基本操作和简单程序——c语言
- Android性能提升的7大方法
- 27个代码优化的建议
- js array不支持map filter等的解决办法
- 非递归实现二叉树三种遍历
- ASCII码排序
- 二叉树递归遍历
- 基本的递归函数
- CentOS配置zebra OSPF
- 获取 properties之中的文件内容
- apache_hadoop安装血泪史
- POJ3280 Cheapest Palindrome
- MySQL数据库的查看、创建和删除