题目:
题解:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
int findx(int x, int* inorder, int inorderSize) {
int pos = -1;
for (int i = 0; i < inorderSize; i++) {
if (inorder[i] == x) {
pos = i;
break;
}
}
return pos;
}
struct TreeNode* buildTree(int* preorder, int preorderSize, int* inorder,
int inorderSize) {
if (preorderSize <= 0) {
return NULL;
}
struct TreeNode* root = (struct TreeNode*)malloc(sizeof(struct TreeNode));
root->val = preorder[0];
int rootpos = findx(preorder[0], inorder, inorderSize);
int leftlen = rootpos;
root->left = buildTree(preorder + 1, leftlen, inorder, leftlen);
int rightlen = inorderSize - rootpos - 1;
root->right = buildTree(preorder + 1 + leftlen, rightlen,
inorder + 1 + leftlen, rightlen);
return root;
}