package com.interview.books.leetcodeoj;
import com.interview.leetcode.utils.TreeNode;
/**
* Created_By: stefanie
* Date: 14-12-26
* Time: 下午2:49
*/
public class LOJ105_ConstructBinaryTreeByPreInOrder {
//use preorder[offset] to divide inorder into left and right part as left/right subtree.
//offset should be class attribute to enable offset++.
//build left subtree before right subtree
int offset;
public TreeNode buildTree(int[] preorder, int[] inorder) {
offset = 0;
return buildTree(preorder, inorder, 0, inorder.length - 1);
}
public TreeNode buildTree(int[] preorder, int[] inorder, int low, int high){
if(low > high) return null;
int value = preorder[offset++];
int position = low;
while(position <= high && inorder[position] != value) position++;
TreeNode node = new TreeNode(value);
node.left = buildTree(preorder, inorder, low, position - 1);
node.right = buildTree(preorder, inorder, position + 1, high);
return node;
}
}