题目要求:
分析:
这道题目跟leetcoe105——从前序与中序遍历序列构造二叉树——java实现是姊妹题。
中序遍历:左根右
后序遍历:左右根
解题思路为:后续遍历的最后一个值是根值,记为root,然后去中序遍历中寻找与root值相等的值,将其位置记为index。index的左边,为这棵树的左子树;index的右边,为这棵树的右子树。
然后进行递归即可,注意要设置好递归结束条件。
具体代码如下:
/**
* 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(inorder == null || postorder == null)
return null;
return build(inorder, postorder, postorder.length-1, 0, inorder.length-1);
}
public TreeNode build(int[] inorder, int[] postorder, int postStart, int inStart, int inEnd) {
if(postStart < 0 || inStart > inEnd)
return null;
TreeNode root = new TreeNode(postorder[postStart]);
int index = 0;
for(int i = 0; i < inorder.length; i++) {
if(inorder[i] == root.val) {
index = i;
break;
}
}
root.left = build(inorder, postorder, postStart-(inEnd-index)-1, inStart, index-1);
root.right = build(inorder, postorder, postStart-1, index+1, inEnd);
return root;
}
}