leetcode894. 所有可能的满二叉树(双重递归)

题目

struct TreeNode *newTreeNode(int val)
{
    struct TreeNode *tmp = (struct TreeNode*)malloc(sizeof(struct TreeNode));
    tmp->val = val;
    tmp->left = tmp->right = NULL;
    
    return tmp;
}
struct TreeNode** allPossibleFBT(int N, int* returnSize) {
    struct TreeNode **res = (struct TreeNode**)malloc(sizeof(struct TreeNode*));
    if (N == 1) {
        struct TreeNode* root = newTreeNode(0);
        res = realloc(res, sizeof(struct TreeNode) * ((*returnSize) + 1));
        res[(*returnSize)++] = root;
        return res;
    }
    for (int i = 1; i <= N - 2; i += 2) {
        int lsize = 0, rsize = 0;
        struct TreeNode** l = allPossibleFBT(i, &lsize);
        struct TreeNode** r = allPossibleFBT(N - 1 - i, &rsize);
        for (int j = 0; j < lsize; ++j) {
            for (int k = 0; k < rsize; ++k) {
                struct TreeNode* root = newTreeNode(0);
                root -> left = l[j];
                root -> right = r[k];
                res = realloc(res, sizeof(struct TreeNode) * ((*returnSize) + 1));
                res[(*returnSize)++] = root;
            }
        }
    }     
    return res;    
}

猜你喜欢

转载自blog.csdn.net/qq_35706707/article/details/88674887