面试热题(不同的二分搜索树)

给你一个整数 n ,求恰由 n 个节点组成且节点值从 1n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。

经典的面试题,这部分涉及了组合数学中的卡特兰数,如果对其不清楚的同学可以去看我以前的博客卡特兰数

今天用记忆化搜索以及动态规划进行讲解

  • 记忆化搜索
java 复制代码
    //维护一个记忆化搜素
    int[][] memo;
    public int numTrees(int n) {
     memo=new int[n+1][n+1];
    return  count(1,n);
    }
    public int count(int left,int right){
        //单节点,直接返回1
        if(left>=right){
            return 1;
        }
        if(memo[left][right]!=0){
            return memo[left][right];
        }
        int res=0;
        //遍历区间内的每一个节点,都作为根节点的情况
        for(int mid=left;mid<=right;mid++){
            int l=count(left,mid-1);
            int r=count(mid+1,right);
            res+=l*r;
        }
        memo[left][right]=res;
        return res;
    }
  • 动态规划
java 复制代码
   public int numTrees(int n) {
    //先创建一个存储的数组
     int[] dp=new int[n+1];
     dp[0]=1;
        //节点可能存储的位置
        for (int i =1; i <=n; i++) {
            //左边节点可能存储的个数
            for (int j = 0; j<i; j++) {
                //计算出总种类  dp[j]是左树的节点个数 dp[i-j-1]是右树的节点个数
                dp[i]+=dp[j]*dp[i-j-1];
            }
        }
     return dp[n];
        }
相关推荐
假如让我当三天老蒯16 分钟前
前端跨域解决方案(学习用)
前端·javascript·面试
Colin草率地做慢慢地改19 分钟前
关于QuickStore这个项目的重构(2)- 数据库建表文件
后端·面试·架构
JieE21210 小时前
LeetCode 56. 合并区间|超清晰 JS 图解思路,面试高频区间题
javascript·算法·面试
Jack2017 小时前
HarmonyOS开发中错误处理策略:网络异常统一处理
算法
JustHappy19 小时前
我汇总了身边朋友的经历才发现,其实第一份实习是最难找的......
前端·后端·面试
uhakadotcom19 小时前
在python 的 工程化架构中 ,什么是 薄包装器层?
后端·面试·github
小小杨树19 小时前
读懂色彩:拍照调色不再难
算法·计算机视觉·配色
假如让我当三天老蒯1 天前
模块化:ES Module 与 CommonJS 的区别
前端·面试
沉默王二1 天前
面试官:RAG 不用向量数据库,用 MySQL 硬扛?我:100 万向量不是很轻松?
mysql·面试·ai编程