题目
根据一棵树的前序遍历与中序遍历构造二叉树。
注意:
你可以假设树中没有重复的元素。
例如,给出
前序遍历 preorder = [3,9,20,15,7]
中序遍历 inorder = [9,3,15,20,7]
算法
public TreeNode buildTree(int [] preorder, int [] inorder) {
if(preorder.length == 0||inorder.length == 0){
return null;
}
TreeNode node = new TreeNode(preorder[0]);
for(int i = 0; i < inorder.length; i++){
if(preorder[0] == inorder[i]){
node.left = buildTree(Arrays.copyOfRange(preorder, 1, i+1), Arrays.copyOfRange(inorder, 0, i));
node.right = buildTree(Arrays.copyOfRange(preorder, i+1, preorder.length), Arrays.copyOfRange(inorder, i+1,inorder.length));
}
}
return node;
}
思路:用前序遍历序列获得根节点,用中序遍历序列获得左右子树