请高手帮我讲一个线索二叉树的程序,它是怎么执行的。我读不懂这个程序

它的基本思想我懂,就是在遍历的过程中线索化,它实质是一个双向循环链表。可惜就是读不懂这个程序//线索链表中的结点的定义typedefstructBiTreeNode{in... 它的基本思想我懂,就是在遍历的过程中线索化,它实质是一个双向循环链表。可惜就是读不懂这个程序
//线索链表中的结点的定义
typedef struct BiTreeNode
{
int data;
struct BiTreeNode *lchild,*rchild;//左右指针
struct BiTreeNode *pred,*succ//前驱,后继线索
}*BiTree;
void inorder(BiTree &H,BiTree T)//建立根指针T所指二叉树的中序全线索链表,H指向该线索链表的头结点
{
H=(BiTree)malloc(sizeof(BiTreeNode));//创建线索链表的头结点
H->lchild;H->rchild=NULL;
if(!T){H->pred=H;H->succ=H;}//空树头结点的线索指向结点本身
else{pre=H;
inthreading(T,pre);//对二叉树进行中序遍历,在遍历的过程中进行线索化
pre->succ=H;H->pred->=pre;
}
}
void inthreading(BiTree p,BiTree &pre)
/*对以根指针p所指的二叉树进行遍历,在遍历的过程中进行线索化,p为当前指针,pre是跟随指针,比p慢一拍遍历整个二叉树*/
{
if(p)
{
inthreading(p->lchild,pre);//左子数线索化
pre->succ=p;p->pred=pre;//建立线索
pre=p;//保持pre指向p的前驱
inthreading(p->rchild,pre);//右子数线索化
}
}
展开
 我来答
酋长的爷爷
2011-05-06 · TA获得超过920个赞
知道小有建树答主
回答量:306
采纳率:0%
帮助的人:405万
展开全部
这年头怎么这么多垃圾回答……

你给的是中序线索二叉树的算法。可以结合中序遍历的思想考虑下面这段程序。
void inthreading(BiTree p,BiTree &pre)
/*对以根指针p所指的二叉树进行遍历,在遍历的过程中进行线索化,p为当前指针,pre是跟随指针,比p慢一拍遍历整个二叉树*/
{
if(p)
{
inthreading(p->lchild,pre);//左子数线索化
pre->succ=p;p->pred=pre;//建立线索
pre=p;//保持pre指向p的前驱
inthreading(p->rchild,pre);//右子数线索化
}
}
和中序遍历一样,中序线索化二叉树也是采取“先左、再根、最后右”的顺序,递归实现。
对根建立线索时,程序中采取的是把当前结点的前驱记录在传进来的参数(pre指针)里,然后让前驱的succ指针指向当前的根p,同时让根p的前驱(pred指针)指向pre。完成后,当前的根p也就是右子树根结点的前驱,所以把p赋值给pre,通过递归继续进行对右子树的线索化。

不懂继续问。
追问
我懂了
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式