Bitree *pre;
int in_thread(Bitree *root)
{ if(root!=NULL)
{
in_thread(root->left);
if(pre->right == NULL)
{
pre->rtag=1;
pre->right =root;
}
else
pre->rtag=0;
if(root->left == NULL)
{
root->ltag=1;
root->left=pre;
}
else
root->ltag=0;
pre=root;
in_thread(root->right);
}
}
int create_thread_tree(Bitree *&troot,Bitree *root)
{
troot=(Bitree *)malloc(sizeof(Bitree));
troot->ltag=0;troot->rtag=1;
troot->right = root;
if(root==NULL)
{
troot->left =troot;
}
else
{
troot->left= root;
pre=root;
in_thread(root);
pre->rtag=1;
pre->right=troot;
troot->right=pre;
}
}
int mid_travers_thread(Bitree *troot)
{
Bitree *p;
p=troot->left;
while(p!=troot)
{
while(p->ltag!=1)
p=p->left;
printf("%2d ",p->data);
while(p->rtag==1&& p->right!=troot)
{
p=p->right;printf("%2d ",p->data);
}
p=p->right;
}
}
这段代码实现了二叉树的线索化过程,通过`in_thread`函数为二叉树节点添加左右线索,便于中序遍历。`create_thread_tree`函数创建线索二叉树,并初始化根节点。`mid_travers_thread`函数则利用线索进行中序遍历,输出节点数据。
带头节点&spm=1001.2101.3001.5002&articleId=125118652&d=1&t=3&u=b550410772604ab6979bf44f4300b515)
2010

被折叠的 条评论
为什么被折叠?



