码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Day21——二叉搜索树的最小绝对差、二叉搜索树中的众数 、二叉树的最近公共祖先


    第21天。

    目录

    前言

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

    这里主要是运用了快慢指针去遍历整个二叉搜索树,寻找最小值。

    二、二叉搜索树中的众数

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

    总结


    前言

    今日文案:

    铤而走险,奔驰不已。血溅于渊兮水流如雨。


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

    给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 。

    差值是一个正数,其数值等于两值之差的绝对值。

    力扣

    1. class Solution {
    2. public:
    3. int ans=INT_MAX;
    4. TreeNode*pre=nullptr; //初始化
    5. void search(TreeNode*cur)
    6. {
    7. if(cur==NULL) //终止条件
    8. {
    9. return;
    10. }
    11. search(cur->left); //中序遍历
    12. if(pre!=nullptr) //第一次进入,cur还在叶子节点就不用判断
    13. {
    14. ans=min(ans,cur->val-pre->val); //记录最小值,cur->val是一定大于pre->val
    15. }
    16. pre=cur; //快慢指针
    17. search(cur->right);
    18. }
    19. int getMinimumDifference(TreeNode* root) {
    20. search(root);
    21. return ans;
    22. }
    23. };

    这里主要是运用了快慢指针去遍历整个二叉搜索树,寻找最小值。


    二、二叉搜索树中的众数

    力扣

    1. class Solution {
    2. public:
    3. int count=1,maxcount=0; //记录数字出现重复的频率
    4. TreeNode*pre=0; //双指针
    5. vector<int> ans;
    6. void traversal(TreeNode*root)
    7. {
    8. if(root==0) //终止条件
    9. {
    10. return ;
    11. }
    12. traversal(root->left); //中序遍历
    13. if(pre!=0&&pre->val==root->val) //双指针,后一个的值等于前一个频率加1
    14. {
    15. count++;
    16. }
    17. else //如果不等,说明断开了,重置1
    18. {
    19. count=1;
    20. }
    21. pre=root; //跟上快指针
    22. if(count==maxcount) //储存众数
    23. {
    24. ans.push_back(root->val);
    25. }
    26. if(count>maxcount) //出现了更高频率的
    27. {
    28. maxcount=count; //重置最大频率
    29. ans.clear(); //清除原来的答案,因为跟不上最大频率
    30. ans.push_back(root->val); //插进新的众数
    31. }
    32. traversal(root->right); //遍历
    33. return ;
    34. }
    35. vector<int> findMode(TreeNode* root) {
    36. traversal(root);
    37. return ans;
    38. }
    39. };


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

    力扣

    1. class Solution {
    2. public:
    3. TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
    4. if(root==0) //遍历到空节点,返回空
    5. {
    6. return NULL;
    7. }
    8. if(root==p||root==q) //遇到其中一个就返回节点
    9. {
    10. return root;
    11. }
    12. TreeNode*left=lowestCommonAncestor(root->left,p,q); //后序遍历,先处理子树再返中
    13. TreeNode*right=lowestCommonAncestor(root->right,p,q);
    14. if(left!=0&&right!=0) //分析各种情况
    15. {
    16. return root;
    17. }
    18. if(left==NULL&&right!=NULL) //只有一个记录就继续返回给上一层
    19. {
    20. return right;
    21. }
    22. if(left!=NULL&&right==NULL)
    23. {
    24. return left;
    25. }
    26. else
    27. {
    28. return NULL;
    29. }
    30. }
    31. };

    总结

    写到这里,我觉得对于二叉树的遍历才是最主要的,主要是要分清怎么遍历,再加上每道题的特点,条件判断,杀穿二叉树!!1

  • 相关阅读:
    python文件操作之shutil模块
    涉及 GitHub、GitLab,研究人员发现 70 个 Web 缓存中毒漏洞;微软:许多攻击者仍对 Log4j 漏洞加以利用;VS 2022 新版发布 | 开源日报
    图像变形 -- 移动最小二乘法(MLS)
    [附源码]计算机毕业设计区域医疗服务监管可视化系统Springboot程序
    智慧大屏是如何实现数据可视化的?
    rabbitMq创建交换机,以及路由键绑定队列教程
    STC15单片机-按键检测单击或长按(外部中断)
    Redis:内存淘汰机制
    基于中间件的密码泛在化保障技术研究
    2024有哪些免费的苹果mac电脑系统清理软件?
  • 原文地址:https://blog.csdn.net/m0_72503424/article/details/127696955
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号