/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
struct TreeNode* build(int* preorder, int preorderSize, int preLeft, int preRight,
int* inorder, int inorderSize, int inLeft, int inRight){
printf("%d\t%d\t%d\t%d\n", preLeft, preRight, inLeft, inRight);
int midIndex = 0;
int loop;
struct TreeNode* node = NULL;
if ((preRight > preorderSize) || (preLeft >= preRight) ||
(inRight > inorderSize) || (inLeft >= inRight) ||
(preorder == NULL) || (inorder == NULL)) {
return NULL;
}
for (loop = inLeft; loop < inRight; loop++) {
if (inorder[loop] == preorder[preLeft]) {
midIndex = loop;
}
}
node = (struct TreeNode*) malloc(sizeof(struct TreeNode));
node->val = preorder[preLeft];
node->left = build(preorder, preorderSize, preLeft + 1, preLeft + 1 + midIndex - inLeft,
inorder, inorderSize, inLeft, midIndex);
node->right = build(preorder, preorderSize, preLeft + 1 + midIndex - inLeft, preRight,
inorder, inorderSize, midIndex + 1, inRight);
return node;
}
struct TreeNode* buildTree(int* preorder, int preorderSize, int* inorder, int inorderSize){
return build(preorder, preorderSize, 0, preorderSize, inorder, inorderSize, 0, inorderSize);
}