题目
分析
这是根据前序和中序遍历的结果来重建二叉树,前序:根左右。中序:左根右。那么显然前序遍历结果中的第一个元素就是二叉树的根。然后在中序遍历中找到该结点的位置,位置左边的即为左子树,右边的即为右子树,进行递归即可得到结果。
代码
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public TreeNode buildTree(int[] preorder, int[] inorder) {
if(preorder==null||preorder.length==0)
return null;
TreeNode treeNode=new TreeNode(preorder[0]);
int i=0;
for(;i<inorder.length;i++){
if(inorder[i]==preorder[0])
break;
}
if(i==inorder.length)
throw new IllegalArgumentException("Input error");
treeNode.left=buildTree(Arrays.copyOfRange(preorder,1,i+1),Arrays.copyOfRange(inorder,0,i));
treeNode.right=buildTree(Arrays.copyOfRange(preorder,i+1,preorder.length),Arrays.copyOfRange(inorder,i+1,inorder.length));
return treeNode;
}
}