04.重建二叉树

题目描述

输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
public class Solution {
   public TreeNode reConstructBinaryTree(int [] pre,int [] in) {
        int length = pre.length;
        int flag = -1;
        if(length > 0) {
            int num = pre[0];
            for (int i = 0; i < in.length; i++) {
                if (in[i] == num) {
                    flag = i;
                    break;
                }
            }
            int lengthl = flag;
            int lengthr = length - flag - 1;
            int[] left = new int[lengthl];
            int[] right = new int[lengthr];
            int[] lefti = new int[lengthl];
            int[] righti = new int[lengthr];
            if(lengthl > 0) {
                for (int i = 0; i < lengthl; i++) {
                    left[i] = pre[i + 1];
                    lefti[i] = in[i];
                }
            }
            if(lengthr > 0) {
                for (int i = 0; i < lengthr; i++) {
                    right[i] = pre[flag + i + 1];
                    righti[i] = in[flag + i + 1];
                }
            }
            TreeNode node = new TreeNode(num);
            node.left = reConstructBinaryTree(left, lefti);
            node.right = reConstructBinaryTree(right, righti);

            return node;
        }
        else {
            return null;
        }
    }
}

 

posted @ 2018-07-10 15:01  jolivan  阅读(111)  评论(0)    收藏  举报