线索化二叉树

也就是前驱节点和后继节点的问题
因为最初的节点是通过后一个找到的。也就是递归这么个逆序
所以最初的节点并不知道自己后边的节点是谁
然后我们通过一个辅助变量pre 前一个节点来记录
当执行到后一个节点的时候。我们可以找到前一个,也就是在后一个节点中执行。
将pre 初始化为全局的 null
第一个的前一个是没有,然后第一个执行,每一个节点知道自己的前一个节点谁。所以在

所有的关键在于这个pre pre的记录也就是跟有点像迭代器的指针。
在本节点的时候,我们将left 设置成pre 在下一个节点的时候我们将 pre.right =node 当前。完成了最后边的节点的线索化。需要线索化的只有叶子节点的数据,或者其父节点。

 public void cue(Hero hero) {
        if (hero == null) {
            System.out.println("is null");
        }else {
            if (hero.left != null) {
                cue(hero.left);
            }
            if (hero.left == null) {
                hero.left=pre;
                hero.leftFlag=1;
            }
            if (pre != null && pre.right == null) {
                pre.right = hero;
                pre.rightFlag = 1;
            }
            pre = hero;//当这个节点的左边处理好了。这个方法就结束了。我们将这个节点就是pre了

            if (hero.right != null) {
                cue(hero.right);
            }



        }
    }
class Hero{
        int no;
        String name;
        Hero left;
        Hero right;
        int leftFlag;//如果是1 就是前驱节点
        int rightFlag;//如果是1 就是后继节点

节点中也加了两个属性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值