问题
根据一棵树的中序遍历与后序遍历构造二叉树。
注意:
你可以假设树中没有重复的元素
例子
思路
-
方法1
类似105,后序遍历最后一个是根结点的值,该值把中序遍历分为两半
-
方法2
代码
//方法1
class Solution {
public TreeNode buildTree(int[] inorder, int[] postorder) {
return make(inorder,0,inorder.length-1,postorder,0,postorder.length-1);
}
public TreeNode make(int[] inorder, int i1,int i2, int[] postorder, int p1, int p2) {
if(i1>i2) return null;
//后序遍历数组的最后一个数是根结点
int val = postorder[p2];
TreeNode root = new TreeNode(val);
int k=i1;
for(; k<=i2; k++) {
if(inorder[k]==val) break;
}
int lenL = k-1-i1+1;
root.left=make(inorder,i1,k-1,postorder,p1,p1+lenL-1);
root.right = make(inorder,k+1,i2,postorder,p1+lenL,p2-1);
return root;
}
}
//方法2