一、Description
Given inorder and postorder traversal of a tree, construct the binary tree.
题目大意:给定一个二叉树的中序与后序遍历序列,构建这棵树并返回根结点。
For example, given
inorder = [9,3,15,20,7] postorder = [9,15,7,20,3]
Return the following binary tree:
3 / \ 9 20 / \ 15 7
二、Analyzation
这个题与上一篇中的题目做个对比,代码框架大致相同,基本思路可参考:Construct Binary Tree From Preorder And Postorder Traversal
三、Accepted code
class Solution {
Map<Integer, Integer> map = new HashMap<>();
public TreeNode buildTree(int[] inorder, int[] postorder) {
for (int i = 0; i < inorder.length; i++) {
map.put(inorder[i], i);
}
return help(inorder, postorder, 0, inorder.length - 1, 0, postorder.length - 1);
}
public TreeNode help(int[] inorder, int[] postorder, int a, int b, int c,int d) {
if (a > b || c > d) {
return null;
}
TreeNode root = new TreeNode(postorder[d]);
if (a == b || c == d) {
return root;
}
int index = map.get(postorder[d]);
int len = index - a;
root.left = help(inorder, postorder, a, index - 1, c, c + len - 1);
root.right = help(inorder, postorder, index + 1, b, c + len, d - 1);
return root;
}
}