线索二叉树

后序线索化二叉树
对于如图所示的二叉树,对它进行后序线索化遍历
直接套用后序遍历的递归框架,把线索化操作移动到了两个递归函数后面
在这里插入图片描述

void postThread(TBNode *p,TBNode *&pre)
{
	if(p!=NULL)
	postThread(p->lchild,pre);
	postThread(p->rchold.pre);
	if(p->lchild==NULL)
	{
		p->lchild=pre;
		p->lTag=1;
	}
	if(pre!=NULL&&pre->rchild==NULL)
	{
		pre->child=p;
		pre->rTag=1;
	}
	pre=p;
} 

下面把代码过程走一遍:
P指向根节点,Pre=NULL,进入函数,对P检测,P不为空,进行第一个递归函数,P移动到A2, P不空,继续进入第一个递归函数,P移动到A4.P不空,准备继续进入第一个递归函数,但A4左指针为空,进入了第一个递归函数,也会什么都不做就跳出来,所以直接进入第二个递归函数,P的右指针为空,所以第二个也没必要进入,直接略过,然后开始线索化操作,此时P指向A4,左指针为空,所以把左指针变为左线索,并指向其前驱结点,也就是pre所指结点,但pre为空,所以P的左线索为空,接下去检测pre的值,pre的值为空,所以第二个if语句直接跳过,让pre跟上p,到A4,本层递归函数执行完毕,返回上一层,即p从A2的左孩子回到A2,然后P从第一个递归函数出来,准备进入第二个递归函数,P从A2移动到A5,P不为空,P指向A5,A5的左右指针为空,所以两个递归函数都没必要再进入,然后开始线索化操作,p的左指针为空,p的左指针变成左线索,并指向其前去结点,也就是pre所指结点,pre不为空,且其右指针不为空所以pre的右指针变成线索,指向其后继结点,即P所指结点,让pre跟上P,本层递归函数执行完毕,P回到A2,即从第二个递归函数出来,接下来是线索化操作,此时P的左指针为线索且不空,跳过if语句,pre的右指针不为空,所以将pre的右指针变为线索,指向其后继结点,即P所指结点,pre跟上P,本层递归函数执行完毕,返回上一层,P回到A1,根节点,即P从第一个递归函数出来,准备进入第二个递归函数,P来到A3,进入第一个递归函数,P来到A6,A6的左右指针为空,跳过两个递归入口函数,执行线索化操作。P的左指针为空,变成左线索指向前驱结点,即pre所指结点,pre不空,右指针也不空,跳过if语句,让pre跟上P.本次递归函数结束,返回,P从A3的左孩子返回到A3,p从第一个递归函数出来,准备进入第二个,但p的右指针为空,第二个递归函数跳过,执行线索化操作,p的左指针不为空,跳过if语句,pre为空,且其右指针位空,pre的右指针变为线索,指向后继结点,即P所指结点,pre跟上P,本层递归函数执行完毕,返回上一层,p由A1的右孩子返回,P从第二个递归函数出来,执行线索化操作,p指向A1,左孩子不空,跳过if语句,pre不空,右指针为空,pre的右指针变为线索,指向后继结点,即P所指结点,pre跟上P,本层递归函数执行完毕,整个递归函数结束
终于结束了。。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值