美文网首页
重建二叉树

重建二叉树

作者: 怎样会更好 | 来源:发表于2018-10-31 13:24 被阅读0次

    题目:

    输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。

    public static TreeNode reConstructBinaryTree(int[] pre, int[] in) {
            if (pre.length != in.length || pre.length == 0 || in.length == 0) {
                return null;
            }
            TreeNode root = new TreeNode(pre[0]);
            int index = -1;
            for (int i = 0; i < in.length; i++) {
                if (in[i] == pre[0]) {
                    index = i;
                }
            }
            int[] subLefIn = new int[index];
            int[] subRigIn = new int[in.length - index - 1];
            for (int i = 0; i < in.length ; i++) {
                if (i < index) {
                    subLefIn[i] = in[i];
                }
                if (i > index) {
                    subRigIn[i - index-1] = in[i];
                }
            }
            int[] subLefPre = new int[index];
            int[] subRigPre = new int[pre.length - index - 1];
            for (int i = 1; i < pre.length; i++) {
                if (i < index+1) {
                    subLefPre[i -1 ] = pre[i];
                }
                if (i >= index +1) {
                    subRigPre[i - index -1 ] = pre[i];
                }
            }
            root.left = reConstructBinaryTree(subLefPre,subLefIn);
            root.right = reConstructBinaryTree(subRigPre,subRigIn);
            return root;
        }
    

    相关文章

      网友评论

          本文标题:重建二叉树

          本文链接:https://www.haomeiwen.com/subject/sucatqtx.html