struct TreeNode** buildTree(int start,int end,int *returnSize){
if(start>end){
(*returnSize) = 1;
struct TreeNode ** ret = malloc(sizeof(struct TreeNode*));
ret[0] = NULL;
return ret;
}
*returnSize = 0;
struct TreeNode **allTrees = malloc(0);
for(int i=start;i<=end;i++){
int lSize;
struct TreeNode** leftTrees = buildTree(start,i-1,&lSize);
int rSize;
struct TreeNode** rightTrees = buildTree(i+1,end,&rSize);
for(int left=0;left<lSize;left++){
for(int right=0;right<rSize;right++){
struct TreeNode* curTree = malloc(sizeof(struct TreeNode));
curTree->val=i;
curTree->left=leftTrees[left];
curTree->right=rightTrees[right];
(*returnSize)++;
allTrees = realloc(allTrees,sizeof(struct TreeNode*)*(*returnSize));
allTrees[(*returnSize)-1]=curTree;
}
}
free(leftTrees);
free(rightTrees);
}
return allTrees;
}
struct TreeNode** generateTrees(int n,int *returnSize){
if(n==0){
(*returnSize)=0;
return NULL;
}
return buildTree(1,n,returnSize);
}
leetCode95不同二叉搜索树2
最新推荐文章于 2024-10-02 15:23:19 发布
该代码实现了一个函数,使用递归的方式生成给定节点数的所有可能不同的二叉树结构。主要通过`buildTree`函数结合左右子树的组合来创建树结构,然后在`generateTrees`中调用`buildTree`以1到n的范围生成n个节点的二叉树。
摘要由CSDN通过智能技术生成