大家好,又见面了,我是你们的朋友全栈君。
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
代码语言:javascript复制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.
代码语言:javascript复制/**
* 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;
}
}
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/106985.html原文链接:https://javaforall.cn