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

二叉树必刷2题:中序遍历(统一迭代)+ 最大深度(极简递归)

目录

一、98. 验证二叉搜索树|中序遍历秒解,一行判断搞定

解题思路(超级通俗)

最优代码(可直接复制提交)

二、199. 二叉树的右视图|层序遍历 yyds,只取最后一个

解题思路(一眼看懂)

最优代码(注释超清晰)

最后总结|二叉树必刷 2 大考点


一、98. 验证二叉搜索树|中序遍历秒解,一行判断搞定

这道题是二叉搜索树核心考点!很多人一上来就错:只判断当前节点和左右孩子大小,大错特错!正确思路:BST 中序遍历一定是递增序列,用这个特性直接秒解!

解题思路(超级通俗)

  1. 核心定理: valid 二叉搜索树 →中序遍历结果严格递增
  2. 递归中序遍历二叉树,把节点值装进 list
  3. 最后遍历 list,只要后一个数 ≤ 前一个数,直接返回 false
  4. 全程无坑、逻辑清晰,面试写这个绝对稳!

最优代码(可直接复制提交)

/** * 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 { // 存储中序遍历结果 List<Integer> list = new ArrayList<>(); public boolean isValidBST(TreeNode root) { // 1. 中序遍历二叉树 traval(root); // 2. 判断是否严格递增 for(int i = 1; i < list.size(); i++){ // 出现非递增,直接不是BST if(list.get(i-1) >= list.get(i)) return false; } return true; } // 中序遍历:左 → 中 → 右 public void traval(TreeNode root){ if(root == null) return ; traval(root.left); list.add(root.val); traval(root.right); } }

亮点总结不用复杂边界判断、不用记录前驱节点,中序遍历 + 一次循环直接通关;思路最直观、代码最简洁,新手最容易掌握!


二、199. 二叉树的右视图|层序遍历 yyds,只取最后一个

面试超爱考!求从右侧看二叉树能看到的节点,本质就是取每一层最右边的节点!标准层序遍历(BFS)一行改动直接 AC,超级经典!

解题思路(一眼看懂)

  1. 用队列实现层序遍历
  2. 每一层只保留最后一个节点→ 就是右视图能看到的节点
  3. 遍历每一层时,判断是不是本层最后一个,是就加入结果集
  4. 逻辑简单、效率高,面试必背模板!

最优代码(注释超清晰)

/** * 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 List<Integer> rightSideView(TreeNode root) { List<Integer> result = new ArrayList<>(); // 队列实现BFS层序遍历 Queue<TreeNode> que = new LinkedList<>(); // 空树直接返回 if(root == null) return result; que.offer(root); while(!que.isEmpty()){ // 记录当前层的节点个数 int size = que.size(); // 遍历当前层所有节点 for(int i = 0; i < size; i++){ TreeNode node = que.poll(); // ✨ 核心:只把每层最后一个节点加入结果 if(i == size - 1) result.add(node.val); // 左右子节点入队 if(node.left != null) que.offer(node.left); if(node.right != null) que.offer(node.right); } } return result; } }

亮点总结标准层序遍历变种,记住 “取每层最后一个”= 右视图;代码通用性极强,改一行就能做左视图、层序遍历、层平均值等一堆题!


最后总结|二叉树必刷 2 大考点

这两道题覆盖二叉搜索树 + 层序遍历两大面试核心:✅ 98 题:BST 判定 = 中序遍历严格递增,无脑好记✅ 199 题:右视图 = 层序遍历取每层最后一个节点代码极简、思路清晰、零坑点,刷完这两道,二叉树基础直接稳一半!

http://www.jsqmd.com/news/568215/

相关文章:

  • 微信小程序授权登录与权限管理的实战指南
  • 基于 RK3576 的双模型联动火警识别系统设计与实现
  • 通信原理期末考点深度解析:从HDB3码到MQAM的实战应用
  • CentOS 7上PolarDB-X部署踩坑实录:从RPM包下载到远程访问的完整避坑指南
  • Openclaw案例之构建《全自动化、高适配、可定制”的AI绘画生产体系》
  • 养老压力下,这块小板子成了中年人的救兵
  • 基于PostGIS与SpringBoot构建高性能动态MVT矢量瓦片服务
  • 【立煌】G101STN01.2友达10.1寸LCD工业液晶屏参数
  • Fast-SCNN的‘学习下采样’模块拆解:如何用共享计算让分割网络跑在123.5 FPS?
  • Product Hunt 每日热榜 | 2026-03-31
  • 绕过支付权限!苍穹外卖项目微信支付模拟实战全流程(含Cpolar内网穿透)
  • NVM下载Node.js老版本总报错?别慌,手把手教你手动下载配置Node 14.21.3(附保姆级截图)
  • CentOS/Ubuntu国内镜像源一键切换脚本分享(附清华/阿里云源配置)
  • PCF8574驱动库深度解析:I²C扩展IO、中断与编码器集成
  • 3步实现完整保存:Full Page Screen Capture高效工具让长网页截图变简单
  • Mac mini M4 安装 Node.js 22 教程
  • 最新奇妙赏盲盒源码_Uniapp前端_易支付对接_无限回调_1_1完美复刻UI
  • OpenWrt在VMware中的另类玩法:单网口实现软路由+管理通道分离
  • 如何利用社交媒体平台来提高 SEO 词语优化效果
  • IT运维的365天--043 Wmic我运行不了?这就尴尬了。
  • 别再盲目堆模块了!YOLOv11改进实战:手把手教你用LSKA注意力+SPPF模块实现高效涨点
  • 从日志分析到用户画像:实战解析Apache Doris三种数据模型在真实业务中的落地姿势
  • 多系统账号反复手动配置?使用自动化编排提升身份管理效率
  • Windows平台PDF文档处理新选择:Poppler预编译工具包深度解析
  • 【注解】常见 Java 注解系统性知识体系总结(附《全方位对比表》+ 思维导图)
  • 手把手教你搭建RAG知识库:从零到一,让你的知识库从“仓库”变“助手”!
  • 从MFC到.NET Core:技术迭代下的开发框架进化论
  • 如何通过4个技术维度优化罗技鼠标宏实现PUBG后坐力控制
  • YOLO26手语识别项目实战3-三十五种手语实时检测系统数据集说明(含训练代码、数据集和GUI交互界面)
  • AssetRipper实战指南:高效提取Unity游戏资源的完整教程