算法训练营day19--530.二叉搜索树的最小绝对差+501.二叉搜索树中的众数+236. 二叉树的最近公共祖先

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

题目链接:https://leetcode.cn/problems/minimum-absolute-difference-in-bst/

文章讲解:https://programmercarl.com/0530.二叉搜索树的最小绝对差.html

视频讲解:https://www.bilibili.com/video/BV1DD4y11779

1.1 初见思路

  1. 二叉搜索树的定义:左子树的所有元素的值都小于中节点,右子树的所有元素的值都大于中节点
  2. 二叉搜索树的特性:二叉搜索树的中序遍历后的数组是一个有序数组

1.2 具体实现

java 复制代码
class Solution {
    TreeNode pre;
    int res = Integer.MAX_VALUE;

    public int getMinimumDifference(TreeNode root) {
        getMin(root);
        return res;
    }

    public void getMin(TreeNode node) {
        if (node == null) {
            return;
        }
        getMin(node.left);
        if (pre != null) {
            res = Math.min(res, Math.abs(node.val - pre.val));
        }

        pre = node;
        getMin(node.right);
    }
}

1.3 重难点

二、 501.二叉搜索树中的众数

题目链接:https://leetcode.cn/problems/find-mode-in-binary-search-tree/

文章讲解:https://programmercarl.com/0501.二叉搜索树中的众数.html

视频讲解:https://www.bilibili.com/video/BV1fD4y117gp

2.1 初见思路

  1. 转换成有序数组,然后遍历一遍数组就可以得到结果
  2. 可以在遍历树的时候就得到结果

2.2 具体实现

java 复制代码
class Solution {

    int times = 0;
    int maxTimes = 0;
    TreeNode pre;
    List<Integer> res = new ArrayList<Integer>();

    public int[] findMode(TreeNode root) {
        findRes(root);
        int[] resArr = new int[res.size()];
        for (int i = 0; i < res.size(); i++) {
            resArr[i] = res.get(i);
        }
        return resArr;
    }

    // 中序遍历:左中右
    public void findRes(TreeNode node) {
        if (node == null) {
            return;
        }

        findRes(node.left);
        if (pre == null || pre.val != node.val) {
            times = 1;
        }
        if (pre != null && pre.val == node.val) {
            times++;
        }
        if (times > maxTimes) {
            maxTimes = times;
            res.clear();
            res.add(node.val);
        } else if (times == maxTimes) {
            res.add(node.val);
        }
        pre = node;
        findRes(node.right);

    }

}

2.3 重难点

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

题目链接:https://leetcode.cn/problems/lowest-common-ancestor-of-a-binary-tree/

文章讲解:https://programmercarl.com/0236.二叉树的最近公共祖先.html

视频讲解:https://www.bilibili.com/video/BV1jd4y1B7E2

3.1 初见思路

  1. 无思路

3.2 具体实现

java 复制代码
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){
          return right;
      }
      if(right==null){
          return left;
      }
      return root;

    }

}

3.3 重难点

相关推荐
烦躁的大鼻嘎14 分钟前
模拟算法实例讲解:从理论到实践的编程之旅
数据结构·c++·算法·leetcode
C++忠实粉丝31 分钟前
计算机网络socket编程(4)_TCP socket API 详解
网络·数据结构·c++·网络协议·tcp/ip·计算机网络·算法
用户37791362947551 小时前
【循环神经网络】只会Python,也能让AI写出周杰伦风格的歌词
人工智能·算法
福大大架构师每日一题1 小时前
文心一言 VS 讯飞星火 VS chatgpt (396)-- 算法导论25.2 1题
算法·文心一言
EterNity_TiMe_1 小时前
【论文复现】(CLIP)文本也能和图像配对
python·学习·算法·性能优化·数据分析·clip
机器学习之心1 小时前
一区北方苍鹰算法优化+创新改进Transformer!NGO-Transformer-LSTM多变量回归预测
算法·lstm·transformer·北方苍鹰算法优化·多变量回归预测·ngo-transformer
yyt_cdeyyds2 小时前
FIFO和LRU算法实现操作系统中主存管理
算法
alphaTao2 小时前
LeetCode 每日一题 2024/11/18-2024/11/24
算法·leetcode
kitesxian2 小时前
Leetcode448. 找到所有数组中消失的数字(HOT100)+Leetcode139. 单词拆分(HOT100)
数据结构·算法·leetcode
VertexGeek3 小时前
Rust学习(八):异常处理和宏编程:
学习·算法·rust