题解42 | #不同的二叉搜索树(二)#

不同的二叉搜索树(二)

https://www.nowcoder.com/practice/0082df531c4147408a72caf9ab167c8f

/**
 * struct TreeNode {
 *  int val;
 *  struct TreeNode *left;
 *  struct TreeNode *right;
 *  TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 * };
 */
class Solution {
  public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param n int整型
     * @return TreeNode类vector
     */
    vector<TreeNode*> dfs(int n, int start) {
        vector<TreeNode*> res;
        //0个的时候
        if (n < start) {
            res.push_back(nullptr);
            return res;
        }
        //1个的时候
        if (n == start) {
            TreeNode* node = new TreeNode(n);
            res.push_back(node);
            return res;
        }
        //开始以res里每一个点为根建立搜索树
        for (int i = start; i <= n; i++) {

            vector<TreeNode*> left = dfs(i-1, start);
            vector<TreeNode*> right = dfs(n, i+1);

            for (int j = 0; j < left.size(); j++) {
                for (int k = 0; k < right.size(); k++) {
                    TreeNode* temp = new TreeNode(i);
                    temp->left = left[j];
                    temp->right = right[k];
                    res.push_back(temp);
                }
            }
        }
        return res;
    }
    vector<TreeNode*> BSTgenerate(int n) {
        // write code here
        return dfs(n, 1);
    }

};

该算法的基本思想

通过递归的方式生成所有可能的二叉搜索树。对于每个根节点的值i,递归生成左子树和右子树,然后将左子树和右子树的所有可能组合起来,构造出以i为根节点的所有可能的二叉搜索树。

具体实现上,定义一个递归函数dfs,参数为n和start,表示生成以[start, n]范围内数字构成的二叉搜索树。首先判断如果n小于start,表示没有数字可以构成二叉搜索树,此时将nullptr加入结果中。然后判断如果n等于start,表示只有一个数字可以构成二叉搜索树,此时将以该数字为值的节点加入结果中。接下来,对于[start, n]范围内的每个数字i,递归生成以i为根节点的左子树和右子树,然后将左子树和右子树的所有可能组合起来,构造出以i为根节点的所有可能的二叉搜索树。

最后,调用dfs函数生成以1到n为节点值的所有可能的二叉搜索树。

时间复杂度为O(4^n/n^(3/2)),(1<=n<=10)

空间复杂度为O(4^n/n^(3/2))。(1<=n<=10)

2024考研数据结构 文章被收录于专栏

本人考研刷算法题,立此专栏练习强化。

全部评论

相关推荐

01-24 08:13
已编辑
合肥工业大学 Java
程序员牛肉:没啥问题。标准的流水线简历,但是学历好一点,所以应该是有约面的机会的。 这段时间可以考虑把自己的两个项目彻底的理一理。争取能够讲清楚每一个功能点
点赞 评论 收藏
分享
牛客765689665号:没有实习是硬伤,央国企看学历
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务