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);
        }
    }
}

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 书香水墨 设计师:CSDN官方博客 返回首页