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

力扣.270. 最接近的二叉搜索树值(中序遍历思想)

文章目录

  • 题目描述
  • 思路
  • 复杂度
  • Code

题目描述

在这里插入图片描述在这里插入图片描述

思路

遍历思想(利用二叉树的中序遍历)

本题的难点在于可能存在多个答案,并且要返回最小的那一个,为了解决这个问题,我门则要利用上二叉搜索树中序遍历为有序序列的特性,具体到代码中(结合代码看):
1.我们用变量res记录最终的结果,同时在中序遍历位置处利用Math.abs(root.val - target) < Math.abs(res - target)边遍历边更新res的值(注意此处是小于号
2.根据 target 和 root.val 的相对大小决定去左右子树搜索:如果 target 比 root 大,那么 root 的左子树差值肯定更大,直接遍历右子树;如果 target 比 root 小,那么 root 的右子树差值肯定更大,直接遍历左子树
3.同时要注意深刻体会
二叉树的中序遍历
(即是在二叉树中遍历完当前根节点的左子树后再准备遍历右子树的时刻)

复杂度

时间复杂度:

O ( n ) O(n) O(n);其中 n n n为二叉树的节点个数

空间复杂度:

O ( h ) O(h) O(h);其中 h h h为二叉树的高度

Code

class Solution {
    int res = Integer.MAX_VALUE;

    public int closestValue(TreeNode root, double target) {
        traverse(root, target);
        return res;
    }

    // Write the if judgment logic in the middle order
    // so that it can be executed from small to large,
    // ensuring that the final result is the smallest value
    private void traverse(TreeNode root, double target) {
        if (root == null) {
            return;
        }
        // Depending on the relative size of target and root.val,
        // search the left and right subtrees
        if (root.val < target) {
            // Mid-order position 
            if (Math.abs(root.val - target) < Math.abs(res - target)) {
                res = root.val;
            }

            // If target is larger than root,
            // then root's left subtree difference must be larger,
            // and the right subtree is traversed directly
            traverse(root.right, target);
        } else {
            // If target is smaller than root,
            // then root's right subtree difference must be larger,
            // and the left subtree is traversed directly
            traverse(root.left, target);
            
            // Mid-order position 
            if (Math.abs(root.val - target) < Math.abs(res - target)) {
                res = root.val;
            }
        }
    }
}

http://www.kler.cn/a/535139.html

相关文章:

  • Python aiortc API
  • 机器学习--python基础库之Matplotlib (1) 超级详细!!!
  • GNN多任务预测模型实现(二):将EXCEL数据转换为图数据
  • Redis bitmap应用
  • ollama部署deepseek实操记录
  • 基于HTML生成网页有什么优势
  • 分析用户请求K8S里ingress-nginx提供的ingress流量路径
  • 服务器升级nginx版本
  • ImportError: cannot import name ‘Undefined‘ from ‘pydantic.fields‘
  • 使用 OpenGL ES 在 iOS 上渲染一个四边形:从基础到实现
  • DKG(Distributed Key Generation)协议
  • 设计模式六大原则和单例模式
  • 依赖版本冲突导致微服务项目启动失败解决方法
  • 数据中台是什么?:架构演进、业务整合、方向演进
  • AI测试工程师成长指南:以DeepSeek模型训练为例
  • 【gjson使用方法】
  • 基于springboot+vue的社区居民诊疗健康管理系统设计与实现
  • [Android] 360行车记录仪谷歌版
  • wxWidgets生成HTML文件,带图片转base64数据
  • 优化深度神经网络
  • GitHub 使用教程:从入门到进阶
  • 使用服务器部署DeepSeek-R1模型【详细版】
  • 114,【6】攻防世界 web wzsc_文件上传
  • C++中命名空间(namespace)
  • 基于docker搭建Kafka集群,使用KRaft方式搭建,摒弃Zookeeper
  • 微软发布基于PostgreSQL的开源文档数据库平台DocumentDB