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

LeetCode 二叉树高频双题绝杀!第 k 小元素 + 右视图,小白一遍学会

目录

前言

第一题:二叉搜索树中第 K 小的元素

🎯 题目要求

💡 小白秒懂核心思路

✅ 完整解题代码

📝 通俗代码解析

第二题:二叉树的右视图

🎯 题目要求

💡 小白秒懂核心思路

✅ 完整解题代码

📝 通俗代码解析

🎉 两道题终极口诀(秒记)

二叉搜索树第 k 小元素

二叉树右视图

总结


前言

二叉树刷题不用死记硬背!今天这两道题是大厂笔试面试高频原题,一个靠中序遍历秒杀,一个靠层序遍历通关,代码极简、思路直白,看完直接能默写,新手也能轻松拿捏!


第一题:二叉搜索树中第 K 小的元素

🎯 题目要求

给定一个二叉搜索树,找出其中第 k 小的元素。注意:你可以假设 k 总是有效的,1 ≤ k ≤ 二叉搜索树元素个数。

💡 小白秒懂核心思路

二叉搜索树有一个黄金定律中序遍历(左→根→右)的结果 = 严格升序数组

所以解题超级简单:

  1. 对树做中序遍历,把节点值按从小到大收集
  2. 第 k 小的元素 = 集合中下标为 k-1的元素一步到位,无任何复杂逻辑!

✅ 完整解题代码

java

运行

/** * 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 int kthSmallest(TreeNode root, int k) { // 中序遍历,从小到大收集所有元素 travle(root); // 返回第k小的元素(下标k-1) return list.get(k-1); } // 中序遍历:左子树 -> 根节点 -> 右子树 public void travle(TreeNode root){ if(root==null) return; // 遍历左子树 travle(root.left); // 加入当前节点 list.add(root.val); // 遍历右子树 travle(root.right); } }

📝 通俗代码解析

  1. 中序遍历二叉搜索树,自动得到升序序列
  2. 把所有节点值存进集合,直接通过下标获取第 k 小元素
  3. 代码短短几行,逻辑一目了然,面试写这个最快最稳!

第二题:二叉树的右视图

🎯 题目要求

给定一个二叉树,想象你站在它右侧,从上到下,返回你能看到的节点值。

💡 小白秒懂核心思路

右视图 =每一层最右边的节点!用层序遍历(BFS)完美解决:

  1. 按层遍历二叉树,一层一层处理
  2. 每一层只保留最后一个节点的值
  3. 收集所有层的最后节点,就是右视图结果

✅ 完整解题代码

java

运行

/** * 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<>(); // 队列实现层序遍历 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; } }

📝 通俗代码解析

  1. 用队列实现层序遍历,一层一层处理节点
  2. size记录当前层的节点数量
  3. 遍历当前层时,只有最后一个节点加入结果集
  4. 最终得到的就是二叉树的右视图,简单粗暴零出错!

🎉 两道题终极口诀(秒记)

二叉搜索树第 k 小元素

中序遍历升序排,第 k 小值下标 k-1

二叉树右视图

层序遍历按层走,每层最后都收入


总结

这两道题是二叉树刷题的基础必做题,一个考察中序遍历,一个考察层序遍历,都是二叉树最核心的遍历方式!代码简洁、思路清晰,学会这两道,二叉树遍历题型直接拿下一半,刷算法效率拉满!

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

相关文章:

  • MCP9700/A温度传感器嵌入式驱动设计与滤波实现
  • AI深度学习中的自动微分与梯度下降机制解析
  • 从config.h.in到命令行:CMake宏定义的‘内外兼修’实战指南(附跨平台示例)
  • 万象视界灵坛实操手册:CLIP-ViT-L/14在数字藏品元数据生成中的应用
  • 中航迈特光束整形金属3D打印技术取得重要进展,多种材料已成功验证
  • LPS331传感器I²C地址修正与嵌入式驱动适配实践
  • 【2026年最新600套毕设项目分享】springboot实验室预约系统(14320)
  • Go语言的数据库操作:从SQL到ORM
  • 收藏!前端打工人破局指南:转AI Agent,告别重复劳动,薪资翻倍
  • “前置作战会议”:在RTL编码前,必须厘清的三个问题
  • 三菱FX5U ModbusTCP从站配置避坑指南:从IP冲突到通讯成功的完整流程
  • 贾子 Kucius 的证伪主义批判与学术评价体系重构:文明持续运行的新范式
  • **发散创新:用Python构建神经符号AI推理引擎——从逻辑规则到深度学习
  • 齿轮基础参数
  • 短视频 SEO 优化对于新手有什么建议_如何分析短视频的 SEO 效果
  • 如何快速上手接口测试?
  • 紫光同创FPGA开发全流程指南:从工具安装到项目实战
  • 基于STM32的箱式变电站安全预警系统设计
  • Redis 实战篇1.4 (Redis优化秒杀)
  • 【游戏】从零到上线:微信小游戏开发全流程解析
  • 西门子S7-200SMART PLC与组态王7.0通信在压铸机控制中的应用:附带完整程序与多媒体资料
  • LPD8806驱动库详解:SPI控制16位PWM LED灯带的嵌入式实践
  • 从‘滋滋’声到过认证:一个Buck电源的EMI实战整改笔记(附PCB布局优化技巧)
  • 上篇:MCP:让AI从“嘴强王者”变“动手达人”的万能插头
  • 从SR到JK:深入解析双稳态电路的时序逻辑核心
  • 如何从视频中高效提取幻灯片:智能工具应用指南
  • 单相级联H桥(CHB)多电平变换器并网仿真,网侧电压220V PR电压外环 ,PI电流内环,有...
  • SEO优化与营销推广的关系是什么
  • Go语言的测试:从单元测试到集成测试
  • Matlab-Simulink动态相量法仿真,精确模拟电力电子的开关动作是的动态变化过程 程序