public static TreeNode create(int[] post, int postLeft,
int postRight,
int[] in, int inLeft, int inRight) {
if (postLeft > postRight) {
return null;
}
TreeNode root = new TreeNode(post[postRight]);
// 从中序遍历中找出根节点
int findIndex = -1;
for (int i=inLeft; i<=inRight; ++i) {
if (in[i]==root.data) {
findIndex = i;
break;
}
}
// 计算左子树的数量
int leftNum = findIndex - inLeft;
root.left = create(post, postLeft, postLeft+leftNum-1,
in, inLeft, findIndex-1);
root.right = create(post, postLeft+leftNum, postRight-1,
in, findIndex+1, inRight);
return root;
}
class TreeNode {
int data;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int data) {
this.data = data;
}
}