Java:中序线索化二叉树及遍历

class Threade{
    BinaryTree root;//记录根节点,用于遍历
    BinaryTree pre;//pre指针,用于线索化,表示上一个节点
    Threade(BinaryTree node){
        this.root = node;
        ThreadeNodes(node);
    }
    public void ThreadeNodes(BinaryTree node){
        if(node == null)
            return;
        ThreadeNodes(node.left);//线索化左节点

        /**
         * 线索化操作,pre与node相互配合线索化
         */
        if(node.left == null){
            node.left = pre;
            node.lefttype = 1;
        }
        if(pre!=null&&pre.right==null){
            pre.right = node;
            pre.righttype = 1;
        }
        pre = node;


        ThreadeNodes(node.right);//线索化右节点

    }
    public void ThreadeTraverse(){
        BinaryTree node = root;//将根节点给node

        while(node!=null){

            while(node.lefttype == 0)
                node = node.left;//中序遍历创建,如果是左孩节点,就继续
            System.out.println(node.val);

            while(node.righttype == 1){//如果right表示右节点,继续
                node = node.right;
                System.out.println(node.val);//循环输出
            }

            node = node.right;
        }
    }
}
class BinaryTree{
    int val;

    BinaryTree left;
    BinaryTree right;

    int lefttype;//左指针类型,0表示指向左节点,1表示指向前驱节点
    int righttype;//右指针类型,0表示指向右节点,1表示指向后继节点

    BinaryTree(){}
    BinaryTree(int val){
        this.val = val;
    }

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值