编辑代码

#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);
}