当前位置:网站首页>leetcode二叉树系列(二叉搜索树篇)
leetcode二叉树系列(二叉搜索树篇)
2022-08-04 09:03:00 【你食不食油饼】
目录
1、不同的二叉搜索树
题目描述:
思路:既然要我们求n个节点组成的二叉搜索树,就可以看作是求当根节点为1组成的二叉搜索树+根节点为2组成的二叉搜索树+根节点为3构成的二叉搜索树+……
G(n) = f(1) + f(2) + f(3) +……
而根节点为1组成的二叉搜索树有多少种呢,根节点不变,左边节点构成的二叉搜索树个数*右边节点构成的二叉搜索树个数
由于是二叉搜索树,左边结点的个数就是(根节点-1),右边结点的个数(总结点数-根节点)
f(1) = G(0)*G(n-1) ,同样的f(2) = G(1)*G(n-2),f(3) = G(2)*G(n-3)……
f(i) = G(i-1)*G(n-i)
两个公式合起来
G(n) = G(0)*G(n-1) + G(1)*G(n-2) + G(2)*G(n-3)+……
这就是我们大名鼎鼎的卡特兰数公式!
得到这个规律,我们思路瞬间就清晰了,这不就是典型的动态规划嘛,咱们直接遍历,从dp[2],直到求到dp[n]
进入代码:
public int numTrees(int n) {
int[] dp = new int[n+1];
dp[0] = 1;
dp[1] = 1;
for(int i = 2; i<= n;i++){
for(int j = 1 ; j <= i ; j++ ){
dp[i] += dp[j-1]*dp[i-j];
}
}
return dp[n];
}
2、验证二叉搜索树
题目描述:
思路:二叉搜索树,就是要求左边节点值小于根节点,根节点小于右边节点,所以我们要判断是否为二叉搜索树,最好的办法就是利用中序遍历,不断遍历,不断比较;
而且是典型的递归问题,我们先要递归到左子树的最左节点,然后把这个最左结点的值记录下来pre,回溯回来与它的根节点比较,然后再向当前根节点的根节点递归,依次比较,当我们左子树递归结束后,此时pre的值是左子树的最右节点,这是左子树的最大值,我们又与根节点root比较,再进入右子树递归;
直接看代码:
long pre = Long.MIN_VALUE;
public boolean isValidBST(TreeNode root) {
if(root == null) return true;
if(!isValidBST(root.left)) return false;
if(root.val <= pre) return false;
pre = root.val;
return isValidBST(root.right);
}
只要思路清晰了,代码很好写出来!
持续更新中~~
边栏推荐
- recursive thinking
- LVGL's multi-language conversion tool -- a good assistant for font settings
- How Oracle for current library or certain library data on the same server number?
- inject() can only be used inside setup() or functional components.
- 反序列化漏洞
- async - await
- binder通信实现
- 思想茶叶蛋 (Jul 31,2022)| 元宇宙(Metaverse)下了一枚什么样的蛋
- 路由/三层交换机DHCP下发地址详解【华为eNSP】
- The difference between character stream and byte stream
猜你喜欢
加降息与BTC流动性事件策略研究
已解决No module named ‘flask_misaka‘【BUG解决】
[Computer recording screen] How to use bandicam to record the game setting graphic tutorial
redis分布式锁的实现
今日睡眠质量记录71分
cannot import name 'import_string' from 'werkzeug' [bug solution]
云函数实现网站自动化签到配置详解【Web函数/Nodejs/cookie】
Layer 3 Switch/Router OSPF Configuration Details [Huawei eNSP Experiment]
[Punctuality Atom STM32 Serial] Chapter 4 STM32 First Experience Excerpted from [Punctual Atom] MiniPro STM32H750 Development Guide_V1.1
【正点原子STM32连载】第一章 本书学习方法 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1
随机推荐
How to import data from PG to kingbaseES
MATLAB绘图总结
获取cpu的核数
记录十条工作中便利的API小技巧
已解决No module named ‘flask_misaka‘【BUG解决】
inject() can only be used inside setup() or functional components.
微信消息从发送到接收,经历了什么?如何防止丢包
async - await
将jpg图片转换成yuv420(NV12)数据文件
今日睡眠质量记录71分
The separation configuration Libpq is supported, speaking, reading and writing
从零开始的tensorflow小白使用指北
[Computer recording screen] How to use bandicam to record the game setting graphic tutorial
VRRP+MSTP配置详解【华为eNSP实验】
优炫数据库只有数据文件如何恢复
yuv420sp转jpg
TiCDC同步延迟问题处理
2022-08-02 Analyze RK817 output 32k clock PMIC_32KOUT_WIFI to WiFi module clock register devm_clk_hw_register
菲沃泰科创板上市:市值123亿 宗坚赵静艳夫妇身价76亿
速速脱单诀窍