首页 > 编程语言 >代码随想录算法训练营第21天

代码随想录算法训练营第21天

时间:2023-01-17 18:22:11浏览次数:62  
标签:TreeNode 21 训练营 随想录 result return NULL root cur

今日刷题3道: 530.二叉搜索树的最小绝对差,501.二叉搜索树中的众数,236. 二叉树的最近公共祖先

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

题目链接/文章讲解:https://programmercarl.com/0530.%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91%E7%9A%84%E6%9C%80%E5%B0%8F%E7%BB%9D%E5%AF%B9%E5%B7%AE.html

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

 

class Solution {
private:
int result = INT_MAX;
TreeNode* pre = NULL;
void traversal(TreeNode* cur) {
    if (cur == NULL) return;
    traversal(cur->left);   // 左
    if (pre != NULL){       // 中
        result = min(result, cur->val - pre->val);
    }
    pre = cur; // 记录前一个
    traversal(cur->right);  // 右
}
public:
    int getMinimumDifference(TreeNode* root) {
        traversal(root);
        return result;
    }
};

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

https://programmercarl.com/0501.%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91%E4%B8%AD%E7%9A%84%E4%BC%97%E6%95%B0.html

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

 

class Solution {
private:
    int maxCount = 0; // 最大频率
    int count = 0; // 统计频率
    TreeNode* pre = NULL;
    vector<int> result;
    void searchBST(TreeNode* cur) {
        if (cur == NULL) return ;

        searchBST(cur->left);       // 左
                                    // 中
        if (pre == NULL) { // 第一个节点
            count = 1;
        } else if (pre->val == cur->val) { // 与前一个节点数值相同
            count++;
        } else { // 与前一个节点数值不同
            count = 1;
        }
        pre = cur; // 更新上一个节点

        if (count == maxCount) { // 如果和最大值相同,放进result中
            result.push_back(cur->val);
        }

        if (count > maxCount) { // 如果计数大于最大值频率
            maxCount = count;   // 更新最大频率
            result.clear();     // 很关键的一步,不要忘记清空result,之前result里的元素都失效了
            result.push_back(cur->val);
        }

        searchBST(cur->right);      // 右
        return ;
    }

public:
    vector<int> findMode(TreeNode* root) {
        count = 0;
        maxCount = 0;
        TreeNode* pre = NULL; // 记录前一个节点
        result.clear();

        searchBST(root);
        return result;
    }
};

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

https://programmercarl.com/0236.%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E6%9C%80%E8%BF%91%E5%85%AC%E5%85%B1%E7%A5%96%E5%85%88.html

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

 

class Solution {
public:
    TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
        if (root == q || root == p || root == NULL) return root;
        TreeNode* left = lowestCommonAncestor(root->left, p, q);
        TreeNode* right = lowestCommonAncestor(root->right, p, q);
        if (left != NULL && right != NULL) return root;
        if (left == NULL) return right;
        return left;
    }
};

标签:TreeNode,21,训练营,随想录,result,return,NULL,root,cur
From: https://www.cnblogs.com/zzw0612/p/17057553.html

相关文章

  • 2023牛客寒假训练营1补题
    K分析思维题,先考虑100100100....这样一个序列能接受最多的1的情况如果有多的1,就先从后面开始放赛时是一样的思路,但是细节方面没处理好代码#include<bits/stdc++.h>u......
  • 代码随想录算法训练营第七天 | 四数相加、赎金信,三数之和,两数之和
    第454题.四数相加IIclassSolution{public:intfourSumCount(vector<int>&nums1,vector<int>&nums2,vector<int>&nums3,vector<int>&nums4){......
  • The 2021 Shanghai Collegiate
    D-Zztrans的班级合照如果没有对序列大小关系的限制,只需要考虑\(a_i\)应该放在第一个序列还是第二个序列,我们定义\(f_{i,j}\)表示前\(i\)个数,第二个序列放了\(j\)......
  • 回顾 2021,展望 2022
    回顾在2021年初,部门经理因为个人职业规划提出离职,领导安排我接手部门经理的职位。我从潜心研究代码的开发者的角色转变为技术研发+管理,一开始是有些......
  • 【拓扑排序】LeetCode 210. 课程表 II
    题目链接210.课程表II思路在BFS过程中将所有入度为0的点放入结果集中,如果最终结果集中点的数目和课程数一样,则说明这个结果集可行。代码classSolution{pub......
  • 代码随想录算法训练营day07 | leetcode 242、349 、202、1
    基础知识哈希常见的结构(不要忘记数组)数组set(集合)map(映射)注意哈希冲突哈希函数LeetCode242分析1.0 HashMap<Character,Integer>记录字符元素及其个数,再......
  • audition 2021 for Mac(au2021) v14.2直装版
    audition2021直装版哪里可以下载使用呢?audition2021mac版直装版是一款专业数字音频编辑软件,提供先进的音频混音、编辑和效果处理功能,专为音频和视频专业人员设计。无论是......
  • 21.Selenium【EC模块】expected_conditions模块介绍
    一、前言expected_conditions是selenium的一个模块(简称EC),其中包含一系列可用于判断的条件。二、学习目标1.了解EC判定方法三、知识点1.【判定方法】判定方法#1.判......
  • LibreOJ L6210 「美团 CodeM 决赛」tree
    链接难度:\(\texttt{?}\)有一颗\(n\)个点的树,每个点有权值\(x_i\),定义一条简单路径的权值为\(f(a_1\toa_2\to...\toa_k)=\frac{x_{a_1}\timesx_{a_2}\times...\t......
  • luogu P7323 [WC2021] 括号路径
    题面传送门为了方便,我们仅保留\((v,u,-w)\)的反向边。可以发现,如果某个点\(u\)到\(v_1,v_2\)同时有相同边权的边,那么\((v_1,v_2)\)就是一个合法的点对。因此可以这样暴力......