二叉树的构造
前序和后序遍历数组,构造出二叉树
public TreeNode constructFromPrePost(int[] preorder, int[] postorder) {
if(preorder == null || preorder.length == 0) return null;
return dfs(preorder, postorder);
}
public TreeNode dfs(int[] pre, int[] post){
if(pre==null || pre.length==0) {
return null;
}
if(pre.length == 1) return new TreeNode(pre[0]);
TreeNode root = new TreeNode(pre[0]);
int n = pre.length;
for(int i=0;i<post.length;i++){
if(pre[1] == post[i]){
int left_count = i + 1;
int[] pre_left = Arrays.copyOfRange(pre, 1, 1 + left_count);
int[] pre_right = Arrays.copyOfRange(pre, left_count + 1, pre.length);
int[] post_left = Arrays.copyOfRange(post,0,left_count);
int[] post_right = Arrays.copyOfRange(post,left_count,post.length-1);
root.left = dfs(pre_left,post_left);
root.right = dfs(pre_right,post_right);
}
}
return root;
}
前序和中序遍历数组,构造出二叉树