线索二叉树的建立与遍历
来源:互联网 发布:ubuntu提取dsdt办法 编辑:程序博客网 时间:2024/05/17 21:07
线索二叉树的建立与遍历
#include<stdio.h>
#include<stdlib.h>
typedef enum PointerTag{Link, Thread};
typedef struct BiThrNode{
char data;
struct BiThrNode *lchild, *rchild;
PointerTag Ltag, Rtag;
}BiThrNode, *BiThrTree;
BiThrTree pre; //全局变量
void InThreading(BiThrTree p){
//线索化函数
if(p){
InThreading(p->lchild);
if(!p->lchild){
p->Ltag=Thread; p->lchild=pre;
}
if(!pre->rchild){
pre->Rtag=Thread; pre->rchild=p;
}
pre=p;
InThreading(p->rchild);
}
}
void BiTree_Thread(BiThrTree bt,BiThrTree &Thrt){
//中序线索化
Thrt=(BiThrTree)malloc(sizeof(BiThrNode));
Thrt->Ltag=Link; Thrt->Rtag=Thread;
Thrt->rchild=Thrt;
if(!bt){
Thrt->Ltag=Thread; Thrt->lchild=Thrt;
}
else{
Thrt->lchild=bt; pre=Thrt;
InThreading(bt);
pre->Rtag=Thread; pre->rchild=Thrt;
Thrt->rchild=pre;
}
}
void visit(char ch){
printf("%3c",ch);
}
void InOrderTravrese_Thrt(BiThrTree Thrt){
//中序遍历
BiThrTree p;
p=Thrt->lchild;
while(p!=Thrt){
while(p->Ltag==Link){
p=p->lchild;
}
visit(p->data);
while(p->Rtag==Thread&&p->rchild!=Thrt){
p=p->rchild;
visit(p->data);
}
p=p->rchild;
}
}
void CreatBiTree(BiThrTree &bt){
//构造二叉树
char ch;
ch=getchar();
if(ch=='#')
bt=NULL;
else{
bt=(BiThrTree)malloc(sizeof(BiThrNode));
bt->data=ch;
CreatBiTree(bt->lchild);
CreatBiTree(bt->rchild);
}
}
int main(){
BiThrTree bt;
BiThrTree Thrt;
printf("输入数据:\n");
CreatBiTree(bt);
BiTree_Thread(bt,Thrt);
InOrderTravrese_Thrt(Thrt);
return 0;
}
- 线索二叉树的建立与遍历
- 线索二叉树的建立与遍历
- 线索二叉树的建立与遍历
- 线索二叉树的建立与遍历
- 线索二叉树的建立与遍历
- 线索二叉树模型的建立与遍历
- 线索二叉树的建立与遍历C/C++
- 二叉树的建立,遍历,线索化
- 线索二叉树的建立及遍历
- 线索二叉树的建立和遍历
- 线索化二叉树的建立,遍历
- 线索二叉树的建立和中序遍历
- 线索二叉树的建立及其遍历访问操作
- c语言实现线索二叉树的建立,线索化以及遍历
- 线索二叉树的遍历
- 二叉树线索化与遍历线索二叉树
- 线索化二叉树、线索二叉树的遍历
- 二叉树的遍历和线索线索二叉树
- JSF Converter介绍与使用
- Fragment hide/show 切换 走的方法onHiddenChanged(boolean hidden)
- 115个Java面试题和答案——终极列表(上)
- Ubuntu下是使用source insight的中文乱码问题
- 正则表达式
- 线索二叉树的建立与遍历
- Spring AOP 学习之Advisor
- 3-Spark高级数据分析-第三章 音乐推荐和Audioscrobbler数据集
- SecureCRT:[1]SecureCRT配色方案
- Spring Cloud Eureka 入门 (一)服务注册中心详解
- 常见HTTP状态码
- oracle的游标用法,for循环游标和fetch into用法上有什么区别
- Drawable与 Bitmap 常用方法
- 如何编译Fribidi for i586/ARM?