42:二叉搜索树与双向链表

二叉搜索树与双向链表

输入一颗二叉搜索树,将该二叉搜索树转换成一个排序的双向链表

public class Offer42 {
	//Java没有内存指针的概念,所以用了个静态变量
    public static TreeNode last = null;
    
    public static void main(String[] args) {
        TreeNode node = Main.createNode();
        TreeNode convert = Convert(node);
        while (convert!=null){
            System.out.println(convert.value);
            convert = convert.right;
        }
    }
    //思路:不难看出是个中序遍历,主要思路就是用指针把二叉树按中序遍历顺序走一遍
    public static TreeNode Convert(TreeNode node){
        ConvertNode(node);
        TreeNode head = last;
        //last指向尾节点
        while (head!=null&&head.left!=null){
            head = head.left;
        }
        return head;
    }
    //节点的left指前,right指后
    public static void ConvertNode(TreeNode node ){
        if(node==null)return ;
        //指向当前节点
        TreeNode current = node;

        //先走到最小节点
        if(node.left!=null){
            ConvertNode(node.left);
        }
        current.left = last;

        if(last!=null){
            last.right = current;
        }

        //指针向前走一步
        last = current;

        //遍历右子树
        if(node.right!=null){
            ConvertNode(node.right);
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值