Miku可爱捏我是阿曼

线索二叉树

Human·2024-03-02 19:54·25 次阅读

线索二叉树

线索二叉树即从前、中、后序三种遍历中其中一种来看,树中的左右孩子都不会是空着的,都会指向对应的前驱和后驱。
以中序遍历为例,二叉树线索化过程如下:
先是树的结构

Copy
typedef struct ThreadNode{
Elemetype data;
struct ThreadNode *lchild,*rchild;
int ltag,rtag;
}ThreadNode,*ThreadTree;
Copy
void InThread(ThreadTree &p,ThreadTree &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;//在下次搜索前及时修改前驱
InThread(p->rchild,pre);//看右子树
}
}

将树进行线索化

Copy
void CreateInThread(ThreadTree T){
ThreadTree pre = NULL;
if(T!=NULL){
InThread(T,pre);
pre->rchild = NULL;
pre->rtag = 1;//对最后一个节点进行修改
}
}

接下来是遍历线索树

Copy
ThreadNode *Firstnode(ThreadNode *p){
while(p->ltag==0) p = p->lchild;
return p;
}//找出左下第一个节点
ThreadNode *Nextnode(ThreadNode *p){
if(p->rtag = 0) return Firstnode(p->rchild);
else return p->rchild;
}//寻找下一个节点
void vist(ThreadNode *p){
printf("%d",p->data);
}
void Inorder(ThreadNode *T){
for(ThreadNode *p = Firstnode(T);p!=NULL;p = Nextnode(p))
vist(p);
}
posted @   想成为编程高手的阿曼  阅读(25)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
点击右上角即可分享
微信分享提示