牛客(26)二叉搜索树与双向链表

//    题目描述
//    输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。
//    要求不能创建任何新的结点,只能调整树中结点指针的指向。
    public static class TreeNode {
        int val = 0;
        TreeNode left = null;
        TreeNode right = null;

        public TreeNode(int val) {
            this.val = val;

        }

    }

    public static TreeNode Convert(TreeNode pRootOfTree) {
        if (pRootOfTree==null||pRootOfTree.left==null&&pRootOfTree.right==null){
            return pRootOfTree;
        }
        //左子树
        TreeNode left=Convert(pRootOfTree.left);
        //保存头结点
        TreeNode head=left;
        //找到最后的位置
        while (left!=null&&left.right!=null){
            left = left.right;
        }
        //
        if (left!=null){
            pRootOfTree.left=left;
            left.right=pRootOfTree;
        }
//        pRootOfTree.left=Convert(pRootOfTree.left);

        //又子树
        TreeNode right=Convert(pRootOfTree.right);
        if (right!=null){
            pRootOfTree.right=right;
            right.left=pRootOfTree;
        }
        return head!=null?head:pRootOfTree;
    }

 

posted @ 2018-05-11 14:16  楷兵  阅读(207)  评论(0编辑  收藏  举报