【LeetCodehot100】T108:将有序数组转换为二叉搜索树 T98:验证搜索二叉树

T108:将有序数组转换为二叉搜索树

题目要求:给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 平衡 二叉搜索树。

题目理解

输入一个升序数组nums

输出一棵"高度平衡"的二叉搜素树(BST)

核心思路

BST特点

左 < 根 < 右

所以我们必须

每次选中间元素当根节点

流程:

1️⃣ 找中点 mid

2️⃣ 创建 root = numsmid

3️⃣ 左子树 = build(left, mid-1)

4️⃣ 右子树 = build(mid+1, right)

代码实现

java 复制代码
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 - left) / 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. 深入递归思想

T98:验证搜索二叉树

题目要求

给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。

有效 二叉搜索树定义如下:

节点的左子树只包含 严格小于 当前节点的数。

节点的右子树只包含 严格大于 当前节点的数。

所有左子树和右子树自身必须也是二叉搜索树。

本质理解

BST定义

对于每个节点:
左子树所有节点 < 当前节点
右子树所有节点 > 当前节点

核心思路

中序遍历

BST 的中序遍历 = 严格递增序列

代码实现

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 {
    long prev=Long.MIN_VALUE;//记录上一个值
    public boolean isValidBST(TreeNode root) {
        return inorder(root);
    }
        private boolean inorder(TreeNode node){
            if(node==null){
                return true;
            }
            //递归调用左子树
            if(!inorder(node.left)){
                return false;
            }
            //中(判断)
            if(node.val<=prev){
                return false;
            }
            prev=node.val;
            //递归调用右子树
            return inorder(node.right);
        }
    
}

本题感悟

被二叉树递归绕的晕晕的

相关推荐
Zhan8611242 小时前
数据接口的序列号机制与丢包检测:西班牙行情数据IBEX指数实时行情接入笔记
大数据·数据结构·笔记·区块链
菜鸡爱玩4 小时前
线性代数矩阵相乘
线性代数·算法·矩阵
devilnumber8 小时前
Java 递归算法 详解 + 核心要点 + 实战运用 + 避坑指南
java·开发语言·算法
‎ദ്ദിᵔ.˛.ᵔ₎10 小时前
双指针、滑动窗口、前缀和、二分查找 算法
算法
顾北顾10 小时前
多头注意力机制
人工智能·深度学习·算法
H1785350909610 小时前
SolidWorks_基于草图的实体特征20_特征错误排查
算法·3d建模·solidworks
hujinyuan2016010 小时前
2025年12月中国电子学会青少年机器人技术等级考试试卷(二级) 真题+答案
人工智能·算法·机器人
bIo7lyA8v11 小时前
算法复杂度评估的实验统计方法与可视化的技术8
算法
李老师讲编程11 小时前
中国电子学会图形化2020.12月Scratch三级考级题
算法·scratch·信息学奥赛·图形化编程·scratch素材
退休倒计时12 小时前
【每日一题】LeetCode 53. 最大子数组和 TypeScript
数据结构·算法·leetcode·typescript