题目描述:
根据一棵树的前序遍历与中序遍历构造二叉树。
注意:
你可以假设树中没有重复的元素。
例如,给出
解题思路:
通过前序遍历我们可以确定出根节点就是preorder[0],通过中序遍历可以确定出左右子树,再依次递归
(1)确定递归结束条件:如果当前子树为null,则返回空
(2)通过preorder找到根节点preorder[0],去中序遍历中查找根节点的位置。
(3)找到该位置,再递归遍历,给根节点root添加左右子树
代码:
public TreeNode buildTree(int[] preorder, int[] inorder) {
if(preorder.length==0||inorder.length==0)
return null;
int rootVal = preorder[0];
TreeNode root = new TreeNode(rootVal);
for (int i = 0; i < inorder.length; i++) {
if(rootVal==inorder[i]) {
root.left = buildTree(Arrays.copyOfRange(preorder, 1, i+1), Arrays.copyOfRange(inorder, 0, i));
root.right = buildTree(Arrays.copyOfRange(preorder, i+1, preorder.length), Arrays.copyOfRange(inorder, i+1, inorder.length));
break;
}
}
return root;
}