package com.interview.books.leetcodeoj;
import com.interview.leetcode.utils.TreeNode;
/**
* Created_By: stefanie
* Date: 14-12-26
* Time: 下午2:55
*/
public class LOJ106_ConstructBinaryTreeByPostInOrder {
//offset initialize as inorder.length - 1, and offset--
//during buildTree, build right(position + 1, high) before build left(low, position - 1)
int offset;
public TreeNode buildTree(int[] inorder, int[] postorder) {
offset = inorder.length - 1;
return buildTree(postorder, inorder, 0, inorder.length - 1);
}
public TreeNode buildTree(int[] postorder, int[] inorder, int low, int high){
if(low > high) return null;
Integer value = postorder[offset--];
int position = high;
while(position >= low && inorder[position] != value) position--;
TreeNode node = new TreeNode(value);
node.right = buildTree(postorder, inorder, position + 1, high);
node.left = buildTree(postorder, inorder, low, position - 1);
return node;
}
}