例如,给出
中序遍历 inorder = [9,3,15,20,7]
后序遍历 postorder = [9,15,7,20,3]
返回如下的二叉树
//和用前序遍历和中序遍历确定二叉树类似
import java.util.*;
class Solution {
public TreeNode buildTree(int[] inorder, int[] postorder) {
if(inorder.length==0||postorder.length==0){
return null;
}
int rootVal = postorder[postorder.length-1];
int leftCount = 0;
//判断根节点位置
for(;leftCount < inorder.length;leftCount++){
if(inorder[leftCount]==rootVal){
break;
}
}
TreeNode root = new TreeNode(rootVal);
int[] leftinorder = Arrays.copyOfRange(inorder,0,leftCount);
int[] leftpostorder = Arrays.copyOfRange(postorder,0,leftCount);
//构造左子树
root.left = buildTree(leftinorder,leftpostorder);
int[] rightinorder = Arrays.copyOfRange(inorder,leftCount+1,inorder.length);
int[] rightpostorder = Arrays.copyOfRange(postorder,leftCount,postorder.length-1);
//构造右子树
root.right = buildTree(rightinorder,rightpostorder);
return root;
}
}