zoukankan      html  css  js  c++  java
  • 二叉搜索树的个数

    二叉搜索树(BST)

    定义

    左孩子的值全部小于根节点,右孩子的值全部大于跟结点,左孩子、右孩子同样满足上述条件。

    假如有3个结点,总共有5个可能的BST:

      1         3     3      2      1
               /     /      /       
         3     2     1      1   3      2
        /     /                        
       2     1         2                 3
    

    问题一:给定结点的个数,计算BST的个数

    分析

    令f(0) = 1
    f(1) = f(0)*f(0)
    f(2) = f(1)*f(0) + f(0)*f(1)
    f(3) = f(2)*f(0) + f(1)*f(1) + f(0)*f(2)
    ……
    f(n) = f(n-1)*f(0) + f(n-2)*f(1) +……f(0)*f(n-1)
    

    参考代码

    int numTrees(int n) {
        vector<int> vec;
        vec.push_back(1);
        for (int i = 1; i <= n; ++i)
        {
            int tmp = 0;
            for (int j = 0; j < i; ++j)
                tmp += vec[j] * vec[i-1-j];
            vec.push_back(tmp);
        }
        return vec[n];
    }

    问题二:给定结点的个数,求出所有的BST

    分析

    递归实现,保存左孩子所有的组合、右孩子所有的组合,之后按着求个数的模式组合左右孩子。

    参考代码

    vector<TreeNode *> generateTrees(int n) {
        vector<TreeNode*> rev = generate(0, n-1);
        return rev;
    }
    vector<TreeNode *> generate(int beg, int end)
    {
        vector<TreeNode* > vec;
        if (beg > end)
        {
            vec.push_back(NULL);
            return vec;
        }
        for (int key = beg; key <= end; ++key)
        {
            vector<TreeNode*> leftTree = generate(beg, key-1);
            vector<TreeNode*> rightTree = generate(key+1, end);
            TreeNode *root = new TreeNode(key);
            for (int j = 0; j < leftTree.size(); ++j)
            {
                for (int k = 0; k < rightTree.size(); ++k)
                {
                    TreeNode *root = new TreeNode(key);
                    root->left = leftTree[j];
                    root->right = rightTree[k];
                    vec.push_back(root);
                }
            }
        }
        return vec;
    }
  • 相关阅读:
    第九周
    第八周
    第七周
    代码复审核查表
    对软件开发的理解
    第六周
    网站流量分析架构及实现
    hive的sql语句
    精简客户端搭建Oracle数据库
    idaa搭建maven发布tomcat
  • 原文地址:https://www.cnblogs.com/kaituorensheng/p/3960263.html
Copyright © 2011-2022 走看看