题解 | #重建二叉树#
重建二叉树
http://www.nowcoder.com/practice/8a19cbe657394eeaac2f6ea9b0f6fcf6
import java.util.*;
public class Solution {
public TreeNode reConstructBinaryTree(int [] pre,int [] vin) {
if(pre.length==0 || vin.length==0) return null;
TreeNode curNode = new TreeNode(pre[0]); // 第一个前序节点为根节点
for (int i = 0; i < vin.length; i++) {
if(pre[0] == vin[i]){ // 在中序序列中找到该值
// Arrays.copyOfRange(arr, l, r)=arr[l,r)左闭右开,包含arr[l],不包含arr[r]
// 对于左子树,pre[1,i]为前序序列, vin[0,i-1]为中序序列
// pre[1,i]=pre[1,i+1);vin[0,i-1]=>vin[0,i)
curNode.left = reConstructBinaryTree(Arrays.copyOfRange(pre, 1, i+1), Arrays.copyOfRange(vin, 0, i));
// 对于右子树,pre[i+1,last]为前序序列, vin[i+1,last]为中序序列
// pre[i+1,last]=pre[i+1,length-1);vin[i+1,last]=>vin[i+1,length-1)
curNode.right = reConstructBinaryTree(Arrays.copyOfRange(pre, i+1, pre.length), Arrays.copyOfRange(vin, i + 1, vin.length));
}
}
return curNode;
}
}