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

LeetCode 二叉搜索树 2 道必刷题|递归一行看懂,秒懂秒会

👋 前言

二叉搜索树(BST)是算法里最常考、最简单、最容易拿分的知识点!今天我用最直白、最小白、最容易记住的方式,带你搞定两道高频题:

  1. 有序数组 → 平衡 BST(简单递归)
  2. 验证一棵树是不是 BST(中序遍历秒杀)

代码干净、思路直白、不绕弯,零基础也能一次学会


LeetCode 108. 将有序数组转换为二叉搜索树

🎯 题目是什么意思?

给你一个升序数组,让你把它变成一棵平衡二叉搜索树

规则很简单:

  • 左子树 < 根
  • 右子树 > 根
  • 整棵树尽量平衡

💡 超级小白思路

数组已经排好序了!那我们直接取中间当根,左边递归建左树,右边递归建右树。

一句话口诀:中间做根,左是左,右是右,递归搞定!

最终代码(最简洁版)

class Solution { public TreeNode sortedArrayToBST(int[] nums) { return build(nums, 0, nums.length - 1); } private TreeNode build(int[] nums, int left, int right) { // 边界:左指针超过右指针,返回空 if (left > right) return null; // 找中间位置作为根节点 int mid = (left + right) / 2; TreeNode root = new TreeNode(nums[mid]); // 递归建左子树 root.left = build(nums, left, mid - 1); // 递归建右子树 root.right = build(nums, mid + 1, right); return root; } }

📘 小白逐行解释

  1. 取数组中间值当根,保证树平衡
  2. 左边所有数 → 递归成左子树
  3. 右边所有数 → 递归成右子树
  4. 最后返回根,一棵完美平衡 BST 就建好了!

LeetCode 98. 验证二叉搜索树

🎯 题目是什么意思?

给你一棵二叉树,让你判断它是不是合法的二叉搜索树

二叉搜索树的规则:

  • 左子树全部 < 根
  • 右子树全部 > 根
  • 所有子树也必须满足

💡 小白最简单思路(不用记复杂逻辑)

二叉搜索树的中序遍历一定是升序的!

所以:

  1. 中序遍历一遍树
  2. 把结果放进 list
  3. 看 list 是不是严格递增
  4. 是 → 合法;不是 → 不合法

超级直白!

最终代码(小白最爱)

class Solution { List<Integer> list = new ArrayList<>(); public boolean isValidBST(TreeNode root) { // 中序遍历 inorder(root); // 判断是否严格递增 for (int i = 1; i < list.size(); i++) { if (list.get(i) <= list.get(i - 1)) { return false; } } return true; } // 中序遍历:左 → 根 → 右 private void inorder(TreeNode root) { if (root == null) return; inorder(root.left); list.add(root.val); inorder(root.right); } }

📘 小白秒懂

  • 中序遍历 BST →一定升序
  • 只要不是升序 → 直接返回 false
  • 逻辑简单、代码短、面试最爱写

🎯 两道题总结(超级好记)

1. 有序数组转平衡 BST

中间做根,左递归左,右递归右

2. 验证 BST

中序遍历 → 看是否升序

http://www.cnnetsun.cn/news/1661643.html

相关文章:

  • 掰开揉碎魔改claudecode后,我盯着 Claude Code 跑了一圈,终于看懂顶级 AI Agent是如何炼成的
  • javaweb协同过滤算法的 美食菜谱推荐分享平台
  • Bmp格式详解
  • 别再让旧显卡吃灰了!手把手教你用Jellyfin和N卡搭建高能效比的家庭影音库
  • QMK Toolbox实战指南:解锁键盘固件刷写的5大核心技巧
  • 别再只跑LDA了!用stm包把用户画像和时序趋势一起建模(附代码)
  • 从一次真实的src漏洞挖掘经历,复盘若依(RuoYi)框架的渗透测试思路
  • ESP32串口通信避坑大全:从电平转换到uasyncio,我踩过的雷你别再踩了(附完整代码)
  • Java技能积累-bean属性初始化后执行某个方法
  • React Native Boilerplate企业级应用开发终极指南:架构设计与最佳实践
  • vite-plugin-federation CSS模块处理:解决样式隔离与冲突问题
  • 威胁情报聚合:OpenClaw定时抓取数据并用SecGPT-14B分析
  • STM32智能浇花系统:物联网全栈开发实践
  • OpenClaw多模态实践:千问3.5-27B分析截图生成周报
  • hello-uniapp小程序分包优化:提升加载速度的关键
  • 3步实现Telegraf智能采样:降低70%数据量仍保持99%监控精度
  • 彻底解决!EF Core 8 脚手架数字默认值本地化陷阱与根治方案
  • 比赛投票活动系统开发指南
  • Apache NiFi终极指南:10个模板与版本控制技巧实现高效流程复用与团队协作
  • 开发者专属:OpenClaw调用Qwen3-14B完成API自动化测试
  • 革命性WebAssembly运行时wasmer-go:让Go语言轻松运行WebAssembly模块
  • 2026年创新科技:40KHz焊线接收管加工技术解析
  • 基于微信小程序实现大学生闲置物品交易平台管理系统【附项目源码+论文说明】
  • 终极指南:如何用GlazeWM提升Premiere/DaVinci Resolve视频编辑效率
  • SearXNG 高级部署方案:自带反向代理的专家级配置
  • 从单片机到Linux驱动的技术成长与转型
  • OpenClaw性能优化:降低Qwen3-14B调用延迟的5个技巧
  • lychee-rerank-mm商业应用:广告素材库按文案意图自动排序与推荐
  • PyTorch 2.8镜像部署教程:适配系统盘50G+数据盘40G的存储最佳实践
  • 【SpringAIAlibaba新手村系列】(10)Text to Voice 文本转语音技术