题解 | #重建二叉树#
重建二叉树
http://www.nowcoder.com/practice/8a19cbe657394eeaac2f6ea9b0f6fcf6
递归递归!
/**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public TreeNode construct(int[]pre,int[]vin,int pl,int pr,int vl,int vr){
TreeNode head=new TreeNode(pre[pl]);
int i=0;
for(i=vl;vin[i]!=pre[pl];i++);
int llen=i-vl;
int rlen=vr-i;
if(llen>0){
head.left=construct(pre,vin,pl+1,pl+llen,vl,vl+llen-1);
}
else{
head.left=null;
}
if(rlen>0){
head.right=construct(pre,vin,pr-rlen+1,pr,vr-rlen+1,vr);
}
else{
head.right=null;
}
return head;
}
public TreeNode reConstructBinaryTree(int [] pre,int [] vin) {
if(pre.length==0)
return null;
return construct(pre,vin,0,pre.length-1,0,vin.length-1);
}
}