思路:
1、从后序结果中取树根节点的内容
2、在中序遍历结果中找根节点的位置rootIdx,然后将中序数据分割成左右两部分
3、创建根节点,递归创建根节点的右子树,递归创建根节点的左子树
class Solution {
int index=0;
private TreeNode BuildTree(int[] inorder,int left,int right,int[] postorder){
if(index<0||left>=right){
return null;
}
//根节点:postorder[index]
//在中序遍历结果中确认根节点的位置rootIdx
int rootIdx=left;
while(rootIdx<right){
if(inorder[rootIdx]==postorder[index]){
break;
}
++rootIdx;
}
//创建树的根节点
TreeNode root=new TreeNode(postorder[index]);
--index;
//递归创建根节点的右子树
root.right=BuildTree(inorder,rootIdx+1,right,postorder);
//递归创建根节点的左子树
root.left=BuildTree(inorder,left,rootIdx,postorder);
return root;
}
public TreeNode buildTree(int[] inorder, int[] postorder) {
index=postorder.length-1;
return BuildTree(inorder,0,inorder.length,postorder);
}
}