二叉树的遍历和线索线索二叉树
来源:互联网 发布:北京行知实践园作文 编辑:程序博客网 时间:2024/05/18 15:27
一、二叉树的遍历
1.先序遍历在二叉树非空的情况下:
(1)访问根结点
(2)先序遍历左子树
(3)先序遍历右子树
对应算法如下:
void PreOrder(BiTree T){
if(T != NULL){
visit(T);//访问根结点
PreOrder(T->lchild);//遍历右子树
PreOrder(T->rchild);//遍历左子树
}
}
2.中序遍历
(1)中序遍历左子树
(2)访问根结点
(3)中序遍历右子树
对应算法如下:
void InOrder(BiTree T){
if(T != NULL){
InOrder(T->lchild);
visit(T);
PreOrder(T->rchild);
}
}
3.后序遍历过程为:
(1)中序遍历左子树
(2)中序遍历右子树
(3)访问根结点
对应算法如下:
void PostOrder(BiTree T){
if(T != NULL){
InOrder(T->lchild);
PreOrder(T->rchild);
visit(T);
}
}
4.由遍历序列构造二叉树
根据先序序列和中序序列可唯一确定一棵二叉树
根据后序序列和中序序列也可以确定一棵二叉树
但是后序和先序序列无法唯一确定一棵二叉树
二、线索二叉树
1.基本概念
若无左子树,令lchild指向前驱结点,若无右子树,令rchild指向后继结点。前继和后继根据遍历序列方式而不同
线索二叉树存储结构描述:
typedef struct _node_{
int data;//数据
struct _node_ *lchild, *rchild;//左右孩子指针
int ltag,rtag;//左右线索标志
}Node;
2.线索二叉树构造
通过中序遍历对二叉树线索化算法:
void InThred(ThreadTree &p,ThreadTrdd &pre){ if(p != NULL){ InThread(p->lchild, pre);//递归,线索化左子树 if(p->lchild == NULL){ //左子树为空,建立前戏线索 p->lchild = pre; p->ltag = 1; } if(pre != NULL && pre->rchild == NULL){ pre->rchild = p; //建立前驱结点的后继线索 pre->rtag = 1; } pre = p; //标记当前结点成为刚刚访问过的结点 InThred(p->rchild, pre); //递归线索化右子树 }}主算法如下:
void CreateInThread(ThreadTree T){ ThreadTree pre = NULL; if(T != NULL){ InThread(T, pre); pre->rchild = NULL;//处理遍历的最后一个结点 pre->rtag = 1; }}3.线索二叉树的遍历
(1)找中序二叉树中中序序列下的第一个结点
ThreadNode *Firstnode(ThreadNode *p){
while(p->ltag == 0) p = p->lchild;
return p;
}
(2)找中序序列二叉树结点p在中序序列下的后继结点
ThreadNode *Nextnode(ThreadNode *p){
if(p->rtag == 0)return Firstnode(p->p->rchild);
else return p->rchild;
}
(3)利用以上两个算法,写出中序线索二叉树的中序遍历算法
void Inorder(ThreadNode *T){
for(ThradNode *p=Firstnode(T); p!=NULL; p=Nextnode(p))
visit(p);
}
阅读全文
0 0
- 二叉树的遍历和线索线索二叉树
- 线索二叉树的生成和遍历
- 线索二叉树的建立和遍历
- 线索二叉树的遍历
- 遍历二叉树和线索二叉树
- 遍历二叉树和线索二叉树
- 线索化二叉树、线索二叉树的遍历
- 线索二叉树和中序非递归遍历线索化后的二叉树
- 线索二叉树及其遍历
- 二叉树的建立,遍历,线索化
- 线索二叉树的建立及遍历
- 线索二叉树的中序遍历
- 线索二叉树的建立与遍历
- 线索二叉树的创建极其遍历
- 线索二叉树的遍历应用
- 线索二叉树的遍历(数据结构)
- 线索二叉树的建立与遍历
- 线索二叉树的生成及遍历
- 【Weblogic】Weblogic安装以及域配置
- (Copy)设计投入方案
- POJ1298(模拟题)
- 高性能spark
- jsp应用实例-网上答题评测系统
- 二叉树的遍历和线索线索二叉树
- hdu 5971 Wrestling Match
- Android实现bitmap指定区域滑动截取
- python面向对象
- IDEA导入elipse构建的github项目
- 单链表(不含头结点)--尾插,查找
- 进程间通信
- bzoj 1486: [HNOI2009]最小圈
- c++知识点----定义抽象基类(纯虚函数)