#include<bits/stdc++.h>
using namespace std;
typedef struct ThreadNode{
int data;
struct ThreadNode *lchild,*rchild;
int ltag,rtag;
//ltag为0时指向结点左孩子,为1时指向结点前驱;
//rtag为0时指向结点右孩子,为1时指向结点后继;
}ThreadNode,*ThreadTree;
ThreadTree pre;
/* 中序线索化,其实就是修改空指针为前驱后继的过程 */
void InThreading(ThreadTree p){
if(p){
InThreading(p->lchild);
if(p->lchild==NULL){
p->ltag=1;
p->lchild=pre; //结点前驱
}
if(p->rchild==NULL){
p->rtag=1;
p->rchild=p; //结点后继
}
pre=p;
InThreading(p->rchild);
}
}
//中序遍历
void InOrderTraverse(ThreadTree p){
ThreadTree T=p;
while(T){
while(T->ltag==0){
p=p->lchild;
}
printf("%d",p->data);
while(p->rtag==1){
p=p->rchild;
printf("%d",p->data);
}
p=p->rchild;
}
}
int main()
{
InThreading(root);
InOrderTraverse(root);
return 0;
}
中序二叉树实现线索化
最新推荐文章于 2024-04-29 19:53:30 发布