LeetCode 二叉搜索树 2 道必刷题|递归一行看懂,秒懂秒会
👋 前言
二叉搜索树(BST)是算法里最常考、最简单、最容易拿分的知识点!今天我用最直白、最小白、最容易记住的方式,带你搞定两道高频题:
- 有序数组 → 平衡 BST(简单递归)
- 验证一棵树是不是 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; } }📘 小白逐行解释
- 取数组中间值当根,保证树平衡
- 左边所有数 → 递归成左子树
- 右边所有数 → 递归成右子树
- 最后返回根,一棵完美平衡 BST 就建好了!
LeetCode 98. 验证二叉搜索树:
🎯 题目是什么意思?
给你一棵二叉树,让你判断它是不是合法的二叉搜索树。
二叉搜索树的规则:
- 左子树全部 < 根
- 右子树全部 > 根
- 所有子树也必须满足
💡 小白最简单思路(不用记复杂逻辑)
二叉搜索树的中序遍历一定是升序的!
所以:
- 中序遍历一遍树
- 把结果放进 list
- 看 list 是不是严格递增
- 是 → 合法;不是 → 不合法
超级直白!
最终代码(小白最爱)
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
中序遍历 → 看是否升序
