题解 | #重建二叉树#
重建二叉树
http://www.nowcoder.com/practice/8a19cbe657394eeaac2f6ea9b0f6fcf6
import java.util.*;
/**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public TreeNode reConstructBinaryTree(int [] pre,int [] vin) {
return re2(pre,vin,pre.length);
}
public TreeNode re2(int [] pre,int [] vin,int len) {
if(len<=0) return null;
TreeNode T = new TreeNode(pre[0]);
int i;
for(i=0; i<len; i++)
if(pre[0]==vin[i]) break;
//根左右 左i根1右i+1
T.left = re2(Arrays.copyOfRange(pre,1,i+1),Arrays.copyOfRange(vin,0,i),i);
T.right = re2(Arrays.copyOfRange(pre,i+1,pre.length),Arrays.copyOfRange(vin,i+1,pre.length),len-i-1);
return T;
}
}
知识点:数组的创建 由于不同于c,java无指针,所以要Arrays.copyOfRange(pre,1,i+1),不能pre+1