LeetCode刷题记62
106. 从中序与后序遍历序列构造二叉树
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public TreeNode build(int[] inorder, int[] postorder, int il, int ir, int pl, int pr) {
if (il > ir) {
return null;
}
if (il == ir) {
return new TreeNode(inorder[il]);
}
TreeNode root = new TreeNode(postorder[pr]);
int i = il;
while (i <= ir){
if (postorder[pr] == inorder[i]) break;
i ++;
}
root.left = build(inorder, postorder, il, i - 1, pl, pl + i - il - 1);
root.right = build(inorder, postorder, i + 1, ir, pl + i - il, pr - 1);
return root;
}
public TreeNode buildTree(int[] inorder, int[] postorder) {
return build(inorder, postorder, 0, inorder.length - 1, 0, postorder.length - 1);
}
}
呵呵,我写完之后自信地交了一发,结果超时了。。。
原因是这里的左右数据注意一下,加一减一什么的要小心。
root.left = build(inorder, postorder, il, i - 1, pl, pl + i - il - 1);
root.right = build(inorder, postorder, i + 1, ir, pl + i - il, pr - 1);
4/5
62/150