二叉树的遍历
来源:互联网 发布:免费域名解析网站软件 编辑:程序博客网 时间:2024/06/13 23:18
1.二叉树结点的定义
typedef char ElemType;typedef struct node{ ElemType data; struct node *lchild; struct node *rchild;}BiTree;
2.建树
void CreateBiTree(BiTree *&T){ char ch; //按先序次序输入二叉树中节点的值(一个字符),空格字符表示空树 scanf("%c",&ch); if(ch==' ') T=NULL; else { T=(BiTree *)malloc(sizeof(BiTree)); T->data=ch; //生成根结点 CreateBiTree(T->lchild); //构造左子树 CreateBiTree(T->rchild); //构造右子树 }}
例如如果要建一棵如下图的二叉树,需要输入ABC××D××E×F××(×表示空格)
3.先序遍历递归算法(中序、后序遍历递归算法类似)
void PreOrder(BiTree *T){ if(T!=NULL) { printf("%c",T->data); PreOrder(T->lchild); PreOrder(T->rchild); }}
4.先序遍历非递归算法
void PreOrderTraverse(BiTree *T){ stack<BiTree*> s; if(T==NULL) { printf("空树\n"); return; } while(T||!s.empty()) { //让根结点先进栈(用来还原),然后一直向左边搜索 while(T) { s.push(T); printf("%c",T->data); T=T->lchild; } //把最近的根结点还原,遍历其右子树 T=s.top(); s.pop(); T=T->rchild; }}
5.中序遍历非递归算法,跟先序遍历非递归算法唯一的不同是访问结点的时间不一样
void InOrderTraverse(BiTree *T){ stack<BiTree *> s; if(T==NULL) { printf("空树\n"); return; } while(T||!s.empty()) { //让根结点先进栈(用来还原),然后一直向左边搜索 while(T) { s.push(T); T=T->lchild; } //把最近的根结点还原,遍历其右子树 T=s.top(); s.pop(); //在出栈之后访问该结点 printf("%c",T->data); T=T->rchild; }}
6.后序遍历非递归算法,添加一个pre指针来判断右子树是否被访问。
void PostOrderTraverse(BiTree *T){ stack<BiTree *> s; BiTree *pre=NULL; //指向前一个被访问的节点 if(T==NULL) { printf("空树\n"); return; } while(T||!s.empty()) { //一直向左走直到为空 while(T) { s.push(T); T=T->lchild; } T=s.top(); //当前节点的右孩子如果为空或者已经被访问过,则访问当前节点 if(T->rchild==NULL||T->rchild==pre) { printf("%c",T->data); pre=T; s.pop(); T=NULL; } //否则访问右孩子 else T=T->rchild; }}
二叉搜索树是二叉树的其中一个重要的应用。可以查看之前关于二叉搜索树的笔记:http://www.cnblogs.com/runnyu/p/4677902.html
0 0
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 将apache添加到服务
- Nginx实现虚拟主机
- 线性表
- 栈的实现与应用
- 两种常用的队列
- 二叉树的遍历
- Spring Ioc基础总结
- Jquery -- ajax使用 和 json处理
- 【leetcode】Valid Number
- hdu1818 It's not a Bug, It's a Feature!(隐式图最短路径Dijkstra)
- java设计模式
- 机房收费和谐的子窗体
- MySQL数据库ERROR 1030 (HY000): Got error 28 from storage engine
- theme style 闪屏