For example, given
inorder = [9,3,15,20,7]
postorder = [9,15,7,20,3]
Return the following binary tree:
3
/
9 20
/
15 7
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public TreeNode buildTree(int[] inorder, int[] postorder) {
int count = inorder.length;
//inIndex是当前树中序遍历的起始位置,postIndex是后序遍历的起始位置,count是个数
return buildTreeHelper(inorder, postorder, 0, postorder.length - 1, count);
}
public TreeNode buildTreeHelper(int[] inorder, int[] postorder, int inIndex, int postIndex, int count){
if(count <= 0)
return null;
TreeNode node = new TreeNode(postorder[postIndex]);
int i = 0;
for(; i < count; i++){
if(inorder[inIndex + i] == postorder[postIndex])
break;
}
node.left = buildTreeHelper(inorder, postorder, inIndex, postIndex - count + i, i);
node.right = buildTreeHelper(inorder, postorder, inIndex + i + 1, postIndex - 1, count - i - 1);
return node;
}
}
inorder = [9,3,15,20,7]
postorder = [9,15,7,20,3]
postIndex 是3的位置,inIndex是9的位置。
左子树9, postindex是0,inIndex是0
右子树
postindex是20,inIndex是15