内容简介:Given inorder and postorder traversal of a tree, construct the binary tree.Note:You may assume that duplicates do not exist in the tree.
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;
}
}
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
The Little Schemer
[美] Daniel P. Friedman、[美] Matthias Felleisen / 卢俊祥 / 电子工业出版社 / 2017-7 / 65.00
《The Little Schemer:递归与函数式的奥妙》是一本久负盛名的经典之作,两位作者Daniel P. Friedman、Matthias Felleisen在程序语言界名声显赫。《The Little Schemer:递归与函数式的奥妙》介绍了Scheme的基本结构及其应用、Scheme的五法十诫、Continuation-Passing-Style、Partial Function、......一起来看看 《The Little Schemer》 这本书的介绍吧!