class Solution {
public TreeNode buildTree(int[] inorder, int[] postorder){
return buildTree(inorder, 0, inorder.length - 1,
postorder, 0, postorder.length - 1);
}
public TreeNode buildTree(int[] inorder, int inStart, int inEnd,
int[] postorder, int postStart, int postEnd){
if(inStart > inEnd){
return null;
}
//根节点的值是后续遍历的最后一个值
int rootVal = postorder[postEnd];
//构造根节点
TreeNode root = new TreeNode(rootVal);
//得到中序遍历根节点的索引
int index = -1;
for (int i = 0; i <= inEnd; i++){
if(inorder[i] == rootVal){
index = i;
break;
}
}
int leftSize = index - inStart;
root.left = buildTree(inorder, inStart, index - 1,
postorder, postStart, postStart + leftSize - 1);
root.right = buildTree(inorder, index + 1, inEnd,
postorder, postStart + leftSize , postEnd - 1);
return root;
}
}
leetcode 106
最新推荐文章于 2024-07-24 23:17:08 发布