【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);
        }
    
}

本题感悟

被二叉树递归绕的晕晕的

相关推荐
糖果豆豆7 分钟前
让 AI 自查三遍,它只会把错的说得更像对的——检查的人和被检查的,是同一个
算法·架构
总裁余(余登武)2 小时前
K-means算法改进(Python版)
python·算法·kmeans
灯澜忆梦2 小时前
【面向对象编程c++】| 指针与自定义数据类型
开发语言·c++·算法
xxwl5852 小时前
区域赛算法模版第八章---贪心(Greedy)
c++·笔记·学习·算法
CCblandy3 小时前
向量检索 ANN 参数实测:换一种数据分布,recall 掉了 51 个百分点
人工智能·python·算法·自然语言处理·性能优化
CS创新实验室3 小时前
一棵树怎么做到“自平衡还不太费力“?——红黑树的旋转与染色
数据结构·算法·红黑树·408·计算机考研
Logic1013 小时前
C语言/数据结构位运算题解:异或XOR找出被挑选一次的果子编号——只出现一次的数字
c语言·数据结构·算法·数组·位运算·时间复杂度·空间复杂度
深圳市快瞳科技有限公司3 小时前
面向端侧部署的多帧宠物身份识别:完整性评分机制与工程约束
人工智能·算法·计算机视觉·端侧ai·宠物识别·宠物ai·宠物身份识别
从小白到软工5 小时前
4-3 项目-学生成绩管理系统(上)
c语言·开发语言·数据结构·经验分享·ai编程
悠仁さん5 小时前
非类型模板参数的特化与偏特化
java·数据结构·算法