LeetCode530.二叉搜索树的最小绝对差 501二叉搜索树中的众数 236二叉树的最近公共祖先

news2024/11/25 16:35:40

文章目录

        • 530二叉搜索树的最小绝对差
          • c++代码实现
          • python 代码实现
        • 501二叉搜索树中的众数
          • c++ 代码实现
          • python 代码实现
        • 236二叉树的最近公共祖先
          • c++代码实现
          • python代码实现

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

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

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

示例 1:

img

输入:root = [4,2,6,1,3]
输出:1

示例 2:

img

输入:root = [1,0,48,null,null,12,49]
输出:1

提示:

  • 树中节点的数目范围是 [2, 104]
  • 0 <= Node.val <= 105
c++代码实现
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    int result = INT_MAX;
    TreeNode * pre = nullptr;
    void traversal(TreeNode* root) {
        if (root == nullptr){
            return;
        }

        traversal(root->left);
        
        if (pre != nullptr) {
            result = min(result, abs(root->val - pre->val));
        }
        // 记录前一个节点
        pre = root;

        traversal(root->right);
    }
    int getMinimumDifference(TreeNode* root) {
        traversal(root);
        return result;
    }
};
python 代码实现
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def __init__(self):
        self.result = float("INF")
        self.pre = None

    def traversal(self, root):
        if not root:
            return
        self.traversal(root.left)
        if self.pre != None:
            self.result = min(self.result, abs(root.val - self.pre.val))
        
        self.pre = root 
        self.traversal(root.right)
        
    def getMinimumDifference(self, root: Optional[TreeNode]) -> int:
        self.traversal(root)
        return self.result

501二叉搜索树中的众数

给你一个含重复值的二叉搜索树(BST)的根节点 root ,找出并返回 BST 中的所有 众数(即,出现频率最高的元素)。

如果树中有不止一个众数,可以按 任意顺序 返回。

假定 BST 满足如下定义:

  • 结点左子树中所含节点的值 小于等于 当前节点的值
  • 结点右子树中所含节点的值 大于等于 当前节点的值
  • 左子树和右子树都是二叉搜索树

示例 1:

img

输入:root = [1,null,2,2]
输出:[2]

示例 2:

输入:root = [0]
输出:[0]

提示:

  • 树中节点的数目在范围 [1, 104]
  • -105 <= Node.val <= 105

**进阶:**你可以不使用额外的空间吗?(假设由递归产生的隐式调用栈的开销不被计算在内)

c++ 代码实现
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    vector<int> results;
    int maxCount = 0;
    int count = 0;
    TreeNode * pre = nullptr;
    void searchBST(TreeNode * root) {
        if (root == nullptr) return;

        // 左
        searchBST(root->left);

        // 中
        // 判断前节点的值是否需要更新 count
        if (pre == nullptr) {
            count = 1;
        } else if (pre != nullptr && root->val == pre->val) {
            count++;
        }else{
            count = 1;
        }
        pre = root;

        // 判断是否需要更新result。
        if (count == maxCount) {
            results.push_back(root->val);
        }
        if (count > maxCount) {
            maxCount = count;
            results.clear();
            results.push_back(root->val);
        }
        // 右
        searchBST(root->right);
    }
    vector<int> findMode(TreeNode* root) {
        searchBST(root);
        return results;
    }
};
python 代码实现
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def __init__(self):
        self.results = []
        self.preNode = None
        self.maxCount = 0
        self.count = 0

    def searchBST(self, root):
        if not root:
            return

        self.searchBST(root.left)

        if not self.preNode:
            self.count = 1
        elif self.preNode.val == root.val:
            self.count += 1
        else:
            self.count = 1

        self.preNode = root

        if self.count == self.maxCount:
            self.results.append(root.val)

        if self.count > self.maxCount:
            self.maxCount = self.count
            self.results = []
            self.results.append(root.val)

        self.searchBST(root.right)

    def findMode(self, root: Optional[TreeNode]) -> List[int]:
        self.searchBST(root)
        return self.results

236二叉树的最近公共祖先

给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。

百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”

示例 1:

img

输入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1
输出:3
解释:节点 5 和节点 1 的最近公共祖先是节点 3 。

示例 2:

img

输入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 4
输出:5
解释:节点 5 和节点 4 的最近公共祖先是节点 5 。因为根据定义最近公共祖先节点可以为节点本身。

示例 3:

输入:root = [1,2], p = 1, q = 2
输出:1

提示:

  • 树中节点数目在范围 [2, 105] 内。
  • -109 <= Node.val <= 109
  • 所有 Node.val 互不相同
  • p != q
  • pq 均存在于给定的二叉树中。
c++代码实现
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
        if (root == p || root == q || root == nullptr) return root;
        TreeNode * left = lowestCommonAncestor(root->left, p, q);
        TreeNode * right = lowestCommonAncestor(root->right, p, q);
        if (left != nullptr && right != nullptr) return root;
        if (left == nullptr) return right; 
        return left;
    }
};
python代码实现
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':
        if root == p or root == q or root == None:
            return root

        left = self.lowestCommonAncestor(root.left, p, q);
        right = self.lowestCommonAncestor(root.right, p, q);

        if left != None and right != None:
            return root

        if left == None:
            return right;

        return left 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/46935.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

运维行业数字化维修数据屏来袭

说起维修数字化&#xff0c;售后维保管理&#xff0c;大家必然想到青鸟云报修&#xff0c;今天我给大家呈现一下青鸟云报修数据大屏是怎么一回事。 这是青鸟云报修第三代数据大屏&#xff0c;在2代基础上增加了更多板块&#xff0c;更加专业和智能化&#xff0c;他主要应用于单…

Unity ab包加载文本 puerts 自定义loader

输出ab包 他会把你创建的ab包都打包 也就是在这里的创建的 string assetBundleDirectory Path.Combine(Application.streamingAssetsPath, "OutAssetBundles"); if (!Directory.Exists(assetBundleDirectory)) {Directory.CreateDirectory(assetBundleDirectory);…

2022/11/28-29总结

刷题 统计2021年10月每个退货率不大于0.5的商品各项指标_牛客题霸_牛客网 思路 主要就是sum函数、round函数、date_format函数 代码实现 select product_id, round(sum(if_click)/count(*),3) ctr, round(sum(if_cart)/sum(if_click),3) cart_rate, round(sum(if_payment)…

大二学生JavaScript实训大作业——动漫秦时明月7页 期末网页制作 HTML+CSS+JavaScript 网页设计实例 企业网站制作

HTML实例网页代码, 本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置&#xff0c;有div的样式格局&#xff0c;这个实例比较全面&#xff0c;有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。 ⚽精彩专栏推荐&#x1…

【JavaScript预解析】

JavaScript预解析1 本节目标2 预解析3 变量预解析和函数预解析4 预解析案例1 本节目标 知道解析器运行JS分为哪两步说出变量提升的步骤和运行过程说出函数提升的步骤和运行过程 2 预解析 JavaScript代码是由浏览器中的JavaScript解析器来执行的。JavaScript解析器在运行Java…

技术解读倚天 ECS 实例 — Arm 芯片的 Python-AI 算力优化

深度学习技术在图像识别、搜索推荐等领域得到了广泛应用。近年来各大 CPU 厂商也逐渐把 AI 算力纳入了重点发展方向&#xff0c;通过《Arm 芯片 Python-AI 算力优化》我们将看到龙蜥社区 Arm 架构 SIG&#xff08;Special Interest Group&#xff09; 利用最新的 Arm 指令集优化…

分析实时云渲染在小程序中可行性应用

点量云小芹和大家分享过很多实时云渲染的优势&#xff0c;比如在网页直接打开&#xff0c;本地无需任何算力支持&#xff0c;所有指令的执行均是在云端服务器上完成的。但在实际中小芹发现很多业主也想在小程序给用户更好的体验&#xff0c;尤其是一些To C的场景下&#xff0c;…

【新知实验室 认识TRTC+四步跑通音视频demo】

1【产品功能介绍】 1.1 什么是TRTC&#xff1f; 实时音视频&#xff08;Tencent RTC &#xff09;是腾讯基于21年来在网络与音频技术上的深度积累&#xff0c;以多人音视频通话和低延时互动直播两大场景化方案&#xff0c;通过腾讯云服务向开发者开放&#xff0c;致力于帮助开…

LabVIEW创建类 2

LabVIEW创建类 2 定义私有数据控件 创建LabVIEW类时&#xff0c;LabVIEW将自动创建类的私有数据控件。请注意在下列项目浏览器窗口中&#xff0c;LabVIEW类的图标是一个有色立方体。该立方体用于代表一个LabVIEW类。私有数据控件的图标是一个带有绿色圆柱体的有色立方体。圆柱…

SpringCloud 从入门到入土

springcloud包含的模块&#xff1a; 1、服务注册与发现 2、服务调用 3、服务熔断 4、负载均衡 5、服务降级 6、服务消息队列 7、配置中心管理 8、服务网关 9、服务监控 10、全链路追踪 11、自动化构建部署 12、服务定时任务调度操作 版本控制留样 重点技术选型&am…

ConstraintLayout布局扩展

相信大家对ConstraintLayout&#xff08;约束布局&#xff09;不陌生,这是google推出的一个强大控件&#xff0c;之所以强大其实主要归纳有两点&#xff1a;减少布局层次&#xff0c;能够轻松实现复杂布局。当然在我们实际使用过程中&#xff0c;是否真的减少了布局层次&#x…

一种亮红色染料AF 594 NHS Ester|295348-87-7|AF 594 Succinimidyl Ester

基础产品数据&#xff08;Basic Product Data&#xff09;&#xff1a; CAS号&#xff1a;295348-87-7 中文名&#xff1a;AF 594活性酯 英文名&#xff1a;AF 594 Succinimidyl Ester&#xff0c;Alexa Fluor 594 NHS Ester&#xff0c;AF 594 NHS Ester 光谱图&#xff08;Sp…

低代码助力生产管理:ERP生产管理系统

随着国内生产技术的迅速发展&#xff0c;企业信息化实现了生产经营活动的运营自动化、管理网络化和决策智能化。其中运营自动化是基础&#xff0c;决策智能化是顶峰。将信息化应用于生产管理有助于提高产品的质量和生产效率&#xff0c;加强对原材料、生产工序、员工、设备和产…

第三十九篇 自定义指令 - directive

前面讲了关于在Vue中如何来进行封装swiper组件的内容&#xff0c;本篇内容讲到使自定义组件&#xff0c;讲这块内容也是同样为了后续再次回顾封装swiper组件变化做铺垫内容&#xff0c;那么什么是自定义指令&#xff0c;在前面的内容讲过了好些常用的指令&#xff0c;如 v-modl…

记录--两行CSS让页面提升了近7倍渲染性能!

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 前言 对于前端人员来讲&#xff0c;最令人头疼的应该就是页面性能了&#xff0c;当用户在访问一个页面时&#xff0c;总是希望它能够快速呈现在眼前并且是可交互状态。如果页面加载过慢&#xff0c;你…

衡师11月月赛web题目wp

目录 1.丢三落四的学姐 2.wep&#xff1f;Pwn&#xff01;&#xff01;&#xff01; 这题web部分是buuctf中的DASCTF X GFCTF 2022十月挑战赛&#xff01;的原题 1.丢三落四的学姐 访问题目位置&#xff0c;很明显的phpstudy搭建的痕迹 访问一下经常信息泄露的几个文件&…

Redis与数据库的爱恨纠葛

Redis 是完全开源的&#xff0c;遵守 BSD 协议&#xff0c;是一个高性能的 key-value 数据库。 早期数据库只要有数据库的操作---增--删--改--查 当用户量特别多的情况下&#xff0c;数据库的数量一定是跟不上用户的数量&#xff0c;对数据库来说是特别繁忙的 看着每天都累趴下…

String_JavaScript

String_JavaScript 学习路线&#xff1a;JavaScript基础语法&#xff08;输出语句&#xff09;->JavaScript基础语法&#xff08;变量&#xff09;->JavaScript基础语法&#xff08;数据类型&#xff09;->JavaScript基础语法&#xff08;运算符&#xff09;->Jav…

海外推广运营的技巧汇总

海外电商运营推广&#xff1f;做海外电商&#xff0c;重点在于运营推广。如果运营推广能做好&#xff0c;那么在行业内分一杯羹并不难。但问题是&#xff0c;在运营推广上&#xff0c;很难做海外电商。 这年头&#xff0c;相信大家都知道海外电商出问题了。很多人的账号都被亚…

动态链接库dll详解

动态链接库概述 DLL就是整个Windows操作系统的基础。动态链接库不能直接运行&#xff0c;也不能接收消息他们是一些独立的文件。 Windows API中的所有函数都包含在DLL中。 其中有三个最重要的DLL kernel32.dll&#xff0c;它包含用于管理内存、线程和进程的各个函数&#xff1b…