Given inorder and postorder traversal of a tree, construct the binary tree.
Example
Given inorder [1,2,3]
and
postorder [1,3,2]
, return a tree:
2
/ \
1 3
public class Solution {
/**
*@param inorder : A list of integers that inorder traversal of a tree
*@param postorder : A list of integers that postorder traversal of a tree
*@return : Root of a tree
*/
public TreeNode buildTree(int[] inorder, int[] postorder) {
return helper(inorder, postorder, 0, inorder.length -1, inorder.length -1);
}
//1) need endP for postorder
TreeNode helper(int[] inorder, int[] postorder, int start, int end, int endP) {
if(start > end) return null;
if(start == end) return new TreeNode(inorder[start]);
int root = postorder[endP];
int rootIndex = -1;
for(int i = start; i <= end; i++) {
if(inorder[i] == root) {
rootIndex = i;
}
}
TreeNode res = new TreeNode(root);//2) calculate carefully the postorder index
res.left = helper(inorder, postorder, start, rootIndex - 1, endP - (end - rootIndex) - 1);
res.right = helper(inorder, postorder, rootIndex + 1, end, endP - 1);
return res;
}
}