保存前一个节点,并在递归右子树之前更新(中序)

二叉搜索树与双向链表

http://www.nowcoder.com/questionTerminal/947f6eb80d944a84850b0538bf0ec3a5

核心转换过程:root.left=pre(向前),pre.right=root(向后)

大佬的图解:来源 https://leetcode-cn.com/problems/er-cha-sou-suo-shu-yu-shuang-xiang-lian-biao-lcof/solution/mian-shi-ti-36-er-cha-sou-suo-shu-yu-shuang-xian-5/
图片说明

二叉树保存前一个节点,pre.在遍历右子树之前更新!!pre=root,dfs(root.right)

    /**
     * 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。
     * 要求不能创建任何新的结点,只能调整树中结点指针的指向。
     * @param pRootOfTree 二叉搜索树
     * @return 排序的双向链表--,收尾节点的处理
     */
    public TreeNode Convert(TreeNode pRootOfTree) {
        if(pRootOfTree==null){
            return null;
        }
        ConvertRecur(pRootOfTree);
        //牛客网提交时需要注销以下两行代码,直接返回this.head.
        this.head.left=pre;
        this.pre.right=head;
        return this.head;
    }
    private TreeNode pre=null;
    private TreeNode head=null;
    public void ConvertRecur(TreeNode root) {
        if(root==null){
            return;
        }
        ConvertRecur(root.left);
        if(this.pre==null){
            head=root;
        }else {
            this.pre.right=root;
        }
        //都会执行这语句。
        root.left=this.pre;
        //记录前一个节点
        pre=root;
        ConvertRecur(root.right);
    }

全部评论

相关推荐

10-25 23:12
门头沟学院 Java
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务