题目
思路
后序遍历的序列的最后一个元素是根节点。根据这个根节点切割、新建数组。和前序与后序遍历序列构造二叉树类似
代码
/**
* 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.length == 0 || postorder.length == 0) return null;
TreeNode root = new TreeNode(postorder[postorder.length - 1]);
for (int i = 0; i < inorder.length; ++i){
if (postorder[postorder.length - 1] == inorder[i]){
int[] post_left = Arrays.copyOfRange(postorder, 0, i);
int[] post_right = Arrays.copyOfRange(postorder, i, postorder.length - 1);
int[] in_left = Arrays.copyOfRange(inorder, 0, i);
int[] in_right = Arrays.copyOfRange(inorder, i+1, inorder.length);
root.left = buildTree(in_left, post_left);
root.right = buildTree(in_right, post_right);
break;
}
}
return root;
}
}