• [LeetCode]: 96: Unique Binary Search Trees


    题目:

    Given n, how many structurally unique BST's (binary search trees) that store values 1...n?

    For example,
    Given n = 3, there are a total of 5 unique BST's.

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

    分析:

    这个题需要采用动态规划的思想,即:最终解只有部分解逐一累加完成的。基于这个思路再看看本题的分析

    当节点数为0的时候,返回0个解

    当节点数为1的时候,返回1个解

    当节点数为2的时候,返回2个解

    当节点数为3的时候,返回5个解,如上图。包括1为顶点的两种解,2为顶点的1种解和3为顶点的2种解。

    当节点数为4的时候,返回15个解,包括当1为顶点的5中解,2为顶点的2种解,3为顶点的2种解和4为顶点的5种解。

    由此可见关于平衡二叉树子树的情况:

        - 某一个点为顶点的时候,子树的个数为:左子树的个数乘以右子树的个数。

        - 多个点的构成的平衡二叉树的个数应该为:其中每一个点作为顶点时其子树的个数 的和。

    本题目最简便的方法是节点数从小到大依次计算,节点多的时候,将节点划分成几个小的节点组合,采用之前计算的结果

    代码如下:

        public static int numTrees(int n) {
            switch(n){
                case 0:
                    return 0; 
                case 1:
                    return 1;
                case 2:
                    return 2;
                default:
                    int[] arrResult = new int[n+1];
                    arrResult[0] = 1;  // 零个节点时候,子树应该为零,但是为了后面左右子树相乘的计算方便,在此强置为1
                    arrResult[1] = 1;
                    arrResult[2] = 2;
                    
                    for(int i = 3;i<=n;i++){  //3个节点开始采用动态规划的方法
                        int intResultTemp = 0;
                        for(int j = 0 ; j<i;j++ ){
                            intResultTemp = intResultTemp + (arrResult[j]*arrResult[i-j-1]);   //左子树数目乘以右子树数目
                        }
                        arrResult[i] = intResultTemp;
                    }
                    return arrResult[n];          
             }
        }
  • 相关阅读:
    Scrapy 教程(三)-网站解析
    Scrapy 教程(二)-操作流程
    Scrapy 教程(一)-安装与入门
    高效编程之 多线程Event
    深信服 长方体的摆放
    2019 深信服 下棋(DFS+回溯)
    最优矩阵连乘问题 区间DP
    k种球若干,取n个球,输出所有取球方案 (模拟)
    KMP(模板)
    A. Optimal Currency Exchange 兑换硬币,剩下的钱最少
  • 原文地址:https://www.cnblogs.com/savageclc26/p/4859065.html
Copyright © 2020-2023  润新知