当前位置: 首页 > news >正文

验证二叉搜索树

验证二叉搜索树

https://leetcode.cn/problems/validate-binary-search-tree/description/?envType=study-plan-v2&envId=top-100-liked

LeetCode98:验证二叉搜索树

请添加图片描述

先说考点:递归

我的理解是,要掌握递归,首先要掌握两个关键点

  1. 递归是用来处理重复结构的问题
  2. 用好递归要有大局观,不能只看眼前
/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public boolean isValidBST(TreeNode root) {return isValid(root,Long.MIN_VALUE,Long.MAX_VALUE);}boolean isValid(TreeNode node,long min,long max){if(node==null){return true;}if(node.val<=min||node.val>=max){return false;}return isValid(node.left,min,node.val)&&isValid(node.right,node.val,max);}
}

本质

递归是一种将"大问题"等价拆解"为小问题,并通过自身调用自身来解决问题的思维方式.

递归三要素

要素含义
1. 终止条件什么时候不再调用自身(递归停止)避免无限递归,最常见是:if (node == null) return ...
2. 递归调用函数自己调用自己,把问题不断变小(往子结构“深入”)
3. 返回与组合如何用子问题的结果构造当前问题的答案(通常是 return ... + ... / 合并左右子树结果

那什么时候适合用递归呢?

灵魂两问

问题意义
问题是否具有自相似结构?比如:树、链表、数组分割等
当前问题能否被分解为子问题,并组合子问题的结果?如果能,用递归就对了

常见的适用于递归的场景

场景示例题特征
树的遍历前中后序、判断 BST、树深度等子结构 = 子树
分治类算法快排、归并、二分、汉诺塔拆成两个子问题
回溯全排列、组合、数独穷举+剪枝
动态规划(自顶向下)斐波那契、背包问题用备忘录剪枝
图的 DFS/BFS岛屿数量、染色问题、拓扑排序等图结构递归遍历

如何找到递归的终止条件?

方法一:从结构上找“底层单位”

  • 树:当节点为 null,表示到了叶子节点底部
  • 数组:当索引越界或只有一个元素
  • 数:当 n == 1 或 n == 0
  • 回溯:当字符串走完 / 组合长度达到目标

方法二:从目标分解角度反推“不能再分的情况”

比如:

  • 我要从 n 个数字中选出 k 个
  • 当,当前组合长度达到 k,就不能再选了(递归终止)

递归模版

// 返回类型可以是 boolean、int、List 等
ReturnType recur(参数...) {// 1. 终止条件if (满足结束条件) {return 结果;}// 2. 递归调用,处理子结构ReturnType left = recur(子问题1);ReturnType right = recur(子问题2);// 3. 合并结果,或做逻辑判断return 合并(left, right);
}

谈回此题目

元素实现
终止条件if (node == null) return true;
子问题拆解验证左子树和右子树
递归参数min, max 来定义合法范围
返回结果组合方式左子树是否合法 && 右子树是否合法

总结:掌握递归的 4 步策略

步骤行动
识别是否能递归结构是否可拆?子问题能组合?
明确终止条件到底部 / 组合完成 / 无法再分
写出递归调用找出下一层的“子结构”传进去
合并结果看清返回值 → 是 boolean / 数字 / 集合 → 决定怎么组合

春景祥云

http://www.dtcms.com/a/325741.html

相关文章:

  • (Arxiv-2025)Phantom:通过跨模态对齐实现主体一致性视频生成
  • 如何安装 Git (windows/mac/linux)
  • CodeBuddy IDE完全食用手册:从安装到生产力爆发的技术流解剖
  • 训推一体 | 暴雨X8848 G6服务器 x Intel®Gaudi® 2E AI加速卡
  • Android Audio实战——获取活跃音频类型(十五)
  • 2025 年国内可用 Docker 镜像加速器地址
  • 【深度学习3】向量化(Vectorization)
  • SpringUI Axure元件库:重塑高效原型设计的专业工具集
  • Agent在供应链管理中的应用:库存优化与需求预测
  • 从ELF到进程间通信:剖析Linux程序的加载与交互机制
  • QT之键盘控制虚拟遥控系统开发总结
  • Qt串口通信中继电器状态解析的优化实践
  • 跨平台、低延迟、可嵌入:实时音视频技术在 AI 控制系统中的进化之路
  • c++ 常见关键字
  • 带简易后台管理的米表系统 域名出售系统 自适应页面
  • 适用于高质量核磁共振(NMR)的溶剂推荐
  • 未来物联网大模型:物联网硬件+底层驱动+AI 自动生成和调优LUA脚本,
  • Maven 的 module 管理
  • 变频器实习总结13 传统数据存储、OSS和云数据库 RDS
  • 【11-计算机视觉介绍】
  • C#/.NET/.NET Core技术前沿周刊 | 第 49 期(2025年8.1-8.10)
  • 常用设计模式系列(十九)- 状态模式
  • Flink TableAPI 按分钟统计数据量
  • 电路笔记参考图
  • 老式大头显示器(CRT)和当前最高分辨率的LED显示器对比
  • 掌握do-while循环:从语法到运用
  • IoT/实现和分析 NB-IoT+DTLS+PSK 接入华为云物联网平台IoTDA过程,总结避坑攻略
  • DeepCompare文件深度对比软件:权限管理与安全功能全面解析
  • Day12 Maven高级
  • openpnp - 顶部相机环形灯光DIY