线索二叉树

线索二叉树本质就是按一定规则将二叉树中结点排列成一个线性序列(对一个非线性结构进行线性操作)。
由于在线索链表中添加了遍历中得到的"前驱"和"后继"信息从而简化了遍历算法。
for(p=firstNode(T);p;p=Succ(p))
Visit(p);
关键是如何找第一个结点和后继。

算法如下:


注意二叉链表和三叉链表都没头结点,线索二叉树有一个头结点。
P=T->lchild 指向头结点说明是有头结点。看下面中序遍历的线索二叉树图就知道了。


1. 这也是为什么第二个while 循环里 P->rchild!=T因为在中序遍历下,最后一个节点rchild 指向头结点了。
2. while(p->rTag==thread&&P->rchild!=T)如果rTag 为htread ,后面p->rchild 不在是指向右孩子而是指向后继,不要被rchild 干扰。
3.为什么加头结点,中序遍历线索链表 第一个结点左指针域一定为空,最后一个结点右指针域一定为空(不管从孩子角度考虑还是从线索角度)。
线索二叉树的生成(本质就是遍历+visit()函数细化):
看如下中序二叉链表本质就是中序遍历二叉树visit函数细化。已经中序遍历算法里visit()改成暗红色块代码了。 if(!p->lchild){......}if(!pre->rchild){......}。
注意利用二叉树数据结构的好多算法都是在遍历基础上对visit()函数细化的过程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值