题目如下:
Given preorder and inorder traversal of a tree, construct the binary tree.
Note:
You may assume that duplicates do not exist in the tree.
For example, given
preorder = [3,9,20,15,7] inorder = [9,3,15,20,7]
Return the following binary tree:
3 / \ 9 20 / \ 15 7
解答如下:
主要思路是,通过前序遍历找到根节点,然后通过根节点将中序遍历数据拆分成两部分,再然后递归就行啦。
代码:
class Solution {
HashMap<Integer, Integer> m=new HashMap<Integer,Integer>();
public TreeNode buildTree(int[] preorder, int[] inorder) {
if(preorder.length==0) return null;
for(int i=0;i<inorder.length;i++){
m.put(inorder[i],i);
}
return build(preorder, 0, preorder.length - 1, inorder, 0, inorder.length - 1);
}
public TreeNode build(int[] preorder, int s0, int e0, int[] inorder, int s1, int e1) {
if(s0 > e0 || s1 > e1) {
return null;
}
int mid = m.get(preorder[s0]);
TreeNode root = new TreeNode(preorder[s0]);
int num = mid - s1;
root.left = build(preorder, s0 + 1, s0 + num, inorder, s1, mid - 1);
root.right = build(preorder, s0 + num + 1, e0, inorder, mid + 1, e1);
return root;
}
}