代码随想录 Day21 - 二叉树(七)

简介: 代码随想录 Day21 - 二叉树(七)

530. 二叉搜索树的最小绝对差

二叉搜索树,双指针遍历,咋有点想到之前做的反转链表。中序遍历递归解法可太秀了。

/**
 * 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 {
    private TreeNode pre;
    private int minDifference;
    public int getMinimumDifference(TreeNode root) {
        this.minDifference = Integer.MAX_VALUE;
        traversal(root);
        return minDifference;
    }
    private void traversal(TreeNode current) {
        if (current == null) {
            return;
        }
        traversal(current.left);
        if (pre != null) {
            minDifference = Math.min(minDifference, current.val - pre.val);
        }
        pre = current;
        traversal(current.right);
    }
}


501. 二叉搜索树中的众数

一次遍历,解决问题,很难想到的了,当然必须是二叉搜索树才可以这样做。

/**
 * 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 {
    private List<Integer> result;
    private int maxCount;
    private int curCount;
    private TreeNode pre;
    public int[] findMode(TreeNode root) {
        this.result = new ArrayList<>();
        traversal(root);
        int[] res = new int[result.size()];
        for (int i = 0; i < result.size(); i++) {
            res[i] = result.get(i);
        }
        return res;
    }
    private void traversal(TreeNode current) {
        if (current == null) {
            return;
        }
        traversal(current.left);
        if (result.isEmpty() && maxCount == 0) {
            result.add(current.val);
        }
        int curVal = current.val;
        if (pre == null || curVal != pre.val) {
            curCount = 1;
        } else {
            curCount++;
        }
        if (curCount > maxCount) {
            result = new ArrayList<>();
            result.add(curVal);
            maxCount = curCount;
        } else if (curCount == maxCount) {
            result.add(curVal);
        }
        pre = current;
        traversal(current.right);
    }
}


236. 二叉树的最近公共祖先

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
     public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
        if (root == null || root == p || root == q) { // 递归结束条件
            return root;
        }
        // 后序遍历
        TreeNode left = lowestCommonAncestor(root.left, p, q);
        TreeNode right = lowestCommonAncestor(root.right, p, q);
        if (left == null && right == null) { // 若未找到节点 p 或 q
            return null;
        } else if (left == null) { // 若找到一个节点
            return right;
        } else if (right == null) { // 若找到一个节点
            return left;
        } else { // 若找到两个节点
            return root;
        }
    }
}

目录
相关文章
|
存储 NoSQL 网络协议
redis相关命令详解及其原理
redis相关命令详解及其原理
106 0
|
JSON 前端开发 Serverless
函数计算产品使用问题之如何将新域名与函数计算服务关联
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
111 0
|
前端开发 搜索推荐 开发者
构建响应式网页布局的现代化策略
【2月更文挑战第27天】在多设备浏览时代,响应式网页设计成为前端开发的核心。本文将深入探讨灵活运用CSS Grid和Flexbox实现响应式布局的先进方法,并通过具体实例展示如何针对不同屏幕尺寸优化用户体验。我们将分析媒体查询的策略性使用,并讨论现代框架如Bootstrap在快速开发中的应用及其自定义技巧。
147 2
|
设计模式 uml
设计模式(五)_工厂方法模式
今天主要讲解的是工厂方法模式。内容参考自java_my_life 博主的博客。但是拒绝粘贴复制,全部手打 工厂方法模式是类的创建模式。工厂方法模式的用意是定义一个创建产品对象的工厂接口,将实际创建工作,推迟到子类中。
1060 0
|
14天前
|
存储 弹性计算 人工智能
【2025云栖精华内容】 打造持续领先,全球覆盖的澎湃算力底座——通用计算产品发布与行业实践专场回顾
2025年9月24日,阿里云弹性计算团队多位产品、技术专家及服务器团队技术专家共同在【2025云栖大会】现场带来了《通用计算产品发布与行业实践》的专场论坛,本论坛聚焦弹性计算多款通用算力产品发布。同时,ECS云服务器安全能力、资源售卖模式、计算AI助手等用户体验关键环节也宣布升级,让用云更简单、更智能。海尔三翼鸟云服务负责人刘建锋先生作为特邀嘉宾,莅临现场分享了关于阿里云ECS g9i推动AIoT平台的场景落地实践。
【2025云栖精华内容】 打造持续领先,全球覆盖的澎湃算力底座——通用计算产品发布与行业实践专场回顾
|
6天前
|
云安全 人工智能 安全
Dify平台集成阿里云AI安全护栏,构建AI Runtime安全防线
阿里云 AI 安全护栏加入Dify平台,打造可信赖的 AI
|
9天前
|
人工智能 运维 Java
Spring AI Alibaba Admin 开源!以数据为中心的 Agent 开发平台
Spring AI Alibaba Admin 正式发布!一站式实现 Prompt 管理、动态热更新、评测集构建、自动化评估与全链路可观测,助力企业高效构建可信赖的 AI Agent 应用。开源共建,现已上线!
856 31