zoukankan      html  css  js  c++  java
  • 96. 不同的二叉搜索树-7月15日

    题目

    96. 不同的二叉搜索树

    我的思路

    很自然想到二叉搜索树的根的左右又是两个二叉搜索树,所以以某个值作为总数跟的二叉搜索树的种类为它左右两个子二叉树的各自种类之乘积。

    应该又是动态规划的思路:1...n为节点组成的二叉搜索树的种数K(n)
    K(n)=K(n-1)*K(0)+K(n-2)*K(1)+K(n-3)*K(2)+...+K(0)*K(n-1)

    我的实现

    class Solution {
    public:
        int numTrees(int n) {
            int K[n+1];
            K[0]=1;
            for(int i=1;i<=n;i++){
                int temp = 0;
                for(int j=0;j<i;j++){
                    temp = temp + K[j]*K[i-j-1];
                }
                K[i] = temp;
            }
            return K[n];
        }
    };
    //应该又是动态规划的思路:1...n为节点组成的二叉搜索树的种数K(n)
    //K(n)=K(n-1)*K(0)+K(n-2)*K(1)+K(n-3)*K(2)+...+K(0)*K(n-1)
    //K(0)=K(1)=1,K(2)=2
    //K(3)=2+1+2=5

    时间复杂度:n^2

    空间复杂度:n

    拓展学习

    二叉搜索树:

    每个节点的左子树的所有值小于根,右子树上的所有值大于根;

    中序遍历=升序遍历;

  • 相关阅读:
    *HDU2473 并查集
    *HDU3172 并查集
    *cf.4 贪心
    *HDU3635 并查集
    *HDU1325 并查集
    *HDU1829 并查集
    Node.js 学习笔记二
    Node.js 学习笔记 一
    AngularJS 学习笔记 一
    MongoDB 基础知识二
  • 原文地址:https://www.cnblogs.com/BoysCryToo/p/13305453.html
Copyright © 2011-2022 走看看