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;
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。