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

文章目录

题目描述

思路

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

本题的难点在于可能存在多个答案,并且要返回最小的那一个 ,为了解决这个问题,我门则要利用上二叉搜索树中序遍历为有序序列 的特性,具体到代码中(结合代码看):

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

java 复制代码
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;
            }
        }
    }
}
相关推荐
云烟成雨TD8 小时前
Spring AI Alibaba 1.x 系列【6】ReactAgent 同步执行 & 流式执行
java·人工智能·spring
小O的算法实验室8 小时前
2026年ASOC,基于深度强化学习的无人机三维复杂环境分层自适应导航规划方法,深度解析+性能实测
算法·无人机·论文复现·智能算法·智能算法改进
于慨8 小时前
Lambda 表达式、方法引用(Method Reference)语法
java·前端·servlet
swg3213218 小时前
Spring Boot 3.X Oauth2 认证服务与资源服务
java·spring boot·后端
gelald8 小时前
SpringBoot - 自动配置原理
java·spring boot·后端
殷紫川8 小时前
深入理解 AQS:从架构到实现,解锁 Java 并发编程的核心密钥
java
一轮弯弯的明月8 小时前
贝尔数求集合划分方案总数
java·笔记·蓝桥杯·学习心得
chenjingming6668 小时前
jmeter线程组设置以及串行和并行设置
java·开发语言·jmeter
殷紫川8 小时前
深入拆解 Java volatile:从内存屏障到无锁编程的实战指南
java
eddieHoo8 小时前
查看 Tomcat 的堆内存参数
java·tomcat