二叉树的非递归先序,中序,后序遍历
2013-09-27 10:56
260 查看
二叉树的非递归遍历:
先序遍历,中序遍历,后序遍历
By Andy @2013-09-08
先序遍历,中序遍历,后序遍历
#include <iostream> #include <stack> using namespace std; typedef struct node { char data; struct node *lchild; struct node *rchild; } BiNode, *BiTree; //先序递归创建树,这里注意参数的类型,T的类型是 "*&" ,如果是 "**" 代码稍加改动就OK... void createTree(BiTree &T) { char ch; cin.get(ch).get(); //过滤输入流中每次回车产生的回车符 if (ch==' ') T = NULL; //这里首先判断是不是空格,如果是,则为该节点赋NULL else { T = (BiTree)malloc(sizeof(BiNode)); T->data = ch; createTree(T->lchild); createTree(T->rchild); } } void preOrderNoRe(BiTree T) // 前序遍历 { if( T == NULL) { return ; } stack<BiTree> s; BiTree p = NULL; p = T; while( p != NULL || !s.empty()) { while (p != NULL) { cout<< p->data <<" "; s.push(p); p = p->lchild; } if(!s.empty()) { p = s.top(); s.pop(); p = p->rchild; } } } void inOrderNoRe(BiTree T) //中序遍历 { if( T == NULL) { return ; } stack<BiTree> s; BiTree p = NULL; p = T; while(p != NULL || !s.empty()) { while (p != NULL) { s.push(p); p = p->lchild; } if (!s.empty()) { p = s.top(); s.pop(); cout << p->data <<" "; p = p->rchild; } } } void postOrderNoRe(BiTree T) //后序遍历 { if( T == NULL) { return ; } BiTree p = NULL; stack<BiTree> s; p = T; int Tag[200]; // 栈,用于标识从左(0)或右(1)返回 int top = -1; while ( p != NULL || !s.empty()) { while( p != NULL) { s.push(p); Tag[++top] = 0; p = p->lchild; } while ( !s.empty() && Tag[top] == 1) { p = s.top(); s.pop(); cout<< p->data << " "; --top; // 出栈 } if (!s.empty()) { Tag[top] = 1; //设置标记右子树已经访问 p = s.top(); p = p->rchild; } else { break; } } } int main() { cout<<"Enter char one by one"<<endl; BiNode *T; createTree(T); cout<<endl; cout<<"preOrderNoRe: "; preOrderNoRe(T); cout<<endl; cout<<"inOrderNoRe: "; inOrderNoRe(T); cout<<endl; cout<<"postOrderNoRe: "; postOrderNoRe(T); cout<<endl; system("pause"); return 0; }
By Andy @2013-09-08
相关文章推荐
- cv::Exception at memory location 0x0040F0D4 opencv计算机视觉编程手册第九章
- 如何给移动硬盘加密
- CoInternetIsFeatureEnabledForUrl
- Ubuntu Linux下为PHP5安装cURL
- 基于opencv的小波变换
- hive 报错 "Too many connections"
- 社会化品牌:移动是趋势
- Python自动单元测试框架
- js setAttribute() 兼容方法
- 定位到驱动中的分派函数
- synchronized同步机制
- linux中shell变量$#,$@,$0,$1,$2的含义解释
- EJB实践和应用理解
- 测试freenas9.1搭建iscsi磁盘库
- java日期转换为oracle日期
- IO流分析整理
- VA转换FileOffset
- iMatrix平台任务受托监控中没有数据解决办法
- POJ 2689 Prime Distance
- html 上传文件时 选中文件后自动开始上传