Given inorder and postorder traversal of a tree, construct the binary tree.Note:You may assume that duplicates do not exist in the 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
难度:medium
题目:给定二叉树中序及后序遍历,构造二叉树,注意二叉树中的结点不重复。
思路;分治。
从后序遍历数组中由后向前取结点 r
在中序遍历中找到 r 的位置,并由此结点分成两部分,继续执行 1.
Runtime: 4 ms, faster than 68.02% of Java online submissions for Construct Binary Tree from Inorder and Postorder Traversal.Memory Usage: 37.6 MB, less than 42.45% of Java online submissions for Construct Binary Tree from Inorder and Postorder Traversal.
/**
* 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[] inorder, int[] postorder) {
if (null == postorder || postorder.length < 1) {
return null;
}
return buildTree(inorder, 0, inorder.length – 1, postorder, postorder.length – 1);
}
public TreeNode buildTree(int[] inorder, int start, int end, int[] postorder, int idx) {
if (start > end || idx < 0) {
return null;
}
TreeNode root = new TreeNode(postorder[idx]);
int rIdx = start;
for (; rIdx <= end; rIdx++) {
if (inorder[rIdx] == postorder[idx]) {
break;
}
}
root.left = buildTree(inorder, start, rIdx – 1, postorder, idx – (end – rIdx) – 1);
root.right = buildTree(inorder, rIdx + 1, end, postorder, idx – 1);
return root;
}
}