线索化二叉树

线索化二叉树

希望充分利用各个节点的左右指针,让各个节点可以指向自己的前后节点。

基本介绍:

二叉链表中的空指针域,存放指向该节点在某种遍历次序下的前驱和后继点的指针。

线索二叉树之后,Node节点的属性有left和right,left可能指向左子树或者前驱节点,right可能指向右子树或者后继节点。

中序线索二叉树基本思路:

在二叉树类中要定义一个pre指针,作为保留的前一个节点。

在node类中创建类型leftType, rightType

1. leftType = 0,指向左子树,leftType = 1,指向前驱节点。
2. rightType = 0,指向右子树,rightType = 1,指向后继节点。

创建函数,传入参数node

  1. 判断node是否为空,为空则不能线索化
  2. 先线索化左子树(递归node.left)
  3. 线索化当前节点
    1. 当node的左后继节点为空时,将当前节点左指针指向pre,并设置为左指针类型。
    2. 当当前node的pre不为空且pre.right指针为空时,让前驱节点的右指针指向当前节点,并设置pre的右指针类型。
    3. 每处理一个节点后,让当前节点是下一个节点的前驱节点。(pre = node)
  4. 线索化右子树(递归node.right)

遍历线索化二叉树

思路:

  1. 定义一个变量,存储当前遍历的节点
  2. node不为空的情况下:
    1. 当lefttype = 0时,node = node.left
    2. 打印这个节点
    3. 若当前节点右指针指向后继节点,就一直输出
    4. 不指向后继节点时替换遍历的点(node = node.right)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值