数据结构--二叉树的线索化

中序线索化--代码实现、一边遍历,一边线索化

注意:1.非空二叉树才能线索化

           2.无论是先序,中序,后序 都要在最后  处理最后一个节点,rchild=null,rtag = 0

为什么线索化?答:为了找前驱和后继

全部的代码实现

先序线索化--代码实现

注意:在遍历的时候,会有一个问题,你在线索化后,你的D节点 线索指向前驱的时候,然后,去看G,G线索没有问题,当你回到B时发现,B的左子树依然有 子树,就会去线索化B,B已经线索化过了,就会一直转圈圈。

        解决方案:在遍历时加上ltag 的条件,ltag =0 就是已经线索化过了,可以不用去线索化了

后序线索化--代码实现

 中序线索二叉树找中序后继

        找中序后继-- 一定有右子树,如果右子树,是最后一个节点,就直接找后继就行,如果不是最后一个节点,需要找到右子树的 最左下节点。

        p->rtag ==1 ,就是没有右子树了,线索化了,可以使用next = p->rchild 直接找到后继

        p->rtag ==0,就是有右子树,你需要找到右子树的 最左下节点,然后返回后继线索

 中序线索二叉树找  中序前驱

        找中序前驱--一定有左子树,如果左子树,是最后一个节点,就直接找前驱就行,如果不是最后一个节点,需要找到左子树的 最右下节点。

先序线索二叉树找  先序后继

 先序线索二叉树 找  先序前驱

        因为 你是用的二叉链表 根左右 ,你找到不到 先序前驱,除非用土办法从头开始先序遍历,还有一种就是 三叉链表,有个指针指向父节点

 用三叉链表找 先序前驱,有四种情况

 后序线索二叉树找后序前驱

 后序线索二叉树 找后序节点,和( 用三叉链表找 先序前驱)相似

 总结

 

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值