#include <stdio.h>
#include "windows.h"
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
};
struct TreeNode *create(int element) {
struct TreeNode *node = malloc(sizeof(struct TreeNode));
node->val = element;
node->left = node->right = NULL;
return node;
}
struct TreeNode *buildTreeCore(int *preorder, int *inorder, int star, int end, int index) {
if (star > end) return NULL;
if (star == end) return create(preorder[index]);
struct TreeNode *node = create(preorder[index]);
int pos = 0;
while (inorder[pos] != preorder[index]) pos++;
node->left = buildTreeCore(preorder, inorder,star, pos - 1, index + 1);
node->right = buildTreeCore(preorder, inorder, pos + 1, end, index + (pos - star) + 1);
return node;
}
struct TreeNode *buildTree(int *preorder, int preorderSize, int *inorder, int inorderSize) {
return buildTreeCore(preorder,inorder,0,inorderSize-1,0);
}