题目
题目来源 : LeetCode
实现
struct TreeNode* _buildTree(int* preorder, int* inorder, int* curindex, int inbegin, int inend){
//创建根
struct TreeNode* root = (struct TreeNode*)malloc(sizeof(struct TreeNode));
root->val = preorder[*curindex];
//在中序遍历中查找根的位置
int rootindex = inbegin;
for(; rootindex <= inend; ++rootindex){
if(inorder[rootindex] == root->val){
break;
}
}
//rootindex 中序遍历根的位置
//创建左子树
if(inbegin < rootindex){
++(*curindex);
root->left = _buildTree(preorder, inorder, curindex, inbegin, rootindex - 1);
}else{
root->left = NULL;
}
//创建右子树
if(inend > rootindex){
++(*curindex);
root->right = _buildTree(preorder, inorder, curindex, rootindex + 1, inend);
}else{
root->right = NULL;
}
return root;
}
struct TreeNode* buildTree(int* preorder, int preorderSize, int* inorder, int inorderSize){
int curindex = 0;
if(preorderSize == 0 || inorderSize == 0){
return NULL;
}
return _buildTree(preorder, inorder, &curindex, 0, inorderSize - 1);
}