【树】你真的会二叉树了嘛? --二叉树LeetCode专题Ⅳ

news2025/1/25 9:05:54

 

Halo,这里是Ppeua。平时主要更新C语言,C++,数据结构算法......感兴趣就关注我吧!你定不会失望。

🌈个人主页:主页链接

🌈算法专栏:专栏链接

     我会一直往里填充内容哒!

🌈LeetCode专栏:专栏链接 

    目前在刷初级算法的LeetBook 。若每日一题当中有力所能及的题目,也会当天做完发出

🌈代码仓库:Gitee链接

🌈点击关注=收获更多优质内容🌈

目录

题目:111. 二叉树的最小深度

题解:

代码实现:

题目:700. 二叉搜索树中的搜索

题解:

代码实现:

题目:701. 二叉搜索树中的插入操作

题解:

代码实现:

题目:450. 删除二叉搜索树中的节点

题解:

代码实现:

完结撒花:


人生苦短,我爱算法!(哭

本章依然是二叉树的刷题 忘记的朋友们可以去看看我的二叉树专题

题目:111. 二叉树的最小深度

题解:

这题和之前做过的,寻找二叉树的最大深度类似.

寻找最大深度是返回最大的节点深度+1(本层节点数)

寻找最小深度就是返回最小的深度再+1(本层节点数)

但是!!!

有个问题,若左子树为空 因为取min则其会直接返回0,但我们深度最低都是一.所以我们需要加一个判断是否为空,若为空则返回另一个枝.

若都不为空则按上面的逻辑进行操作即可.

 

代码实现:

class Solution {
public:
    int minDepth(TreeNode* root) {
        if(root==NULL)return 0;
        int left=minDepth(root->left);
        int right=minDepth(root->right);
        if(left==0)return right+1;
        if(right==0)return left+1;
        return left>right?right+1:left+1;
    }
};

题目:700. 二叉搜索树中的搜索

 

题解:

在开始先,我们先了解一下什么是

BST(Binary Search Tree)二叉搜索树:有点类似堆对数据的操作,其左子树的值小于根的值小于右子树的值

换一种说法就是任何一个右子树的节点都大于左子树的节点,且根节点的值介于二者之间

所以其有左小右大的特点.

所以有了这个特点后在搜索树中找值就很简单啦!

若其大于目标值,就说明要往小的方向找.也就是left

若其小于目标值,就说明要往大的方向找,也就是right 

代码实现:

class Solution {
public:
    TreeNode* searchBST(TreeNode* root, int val) {
        if(root==NULL)return NULL;
        if(root->val==val)return root;
        TreeNode*tmp1=NULL;
        TreeNode*tmp2=NULL;
        if(root->val>val)
            tmp1=searchBST(root->left, val);
        if(root->val<val)
            tmp2=searchBST(root->right, val);
        if(tmp1!=NULL)return tmp1;
        return tmp2;
    }
};

题目:701. 二叉搜索树中的插入操作

题解:

插入与上面的搜索有些许类似,为了满足BST的数据结构.需要找到一个合适的地方进行插入.

如果root.->val大于插入值,就说明这个值得放在其的左边

如果root.->val小于插入值,就说明这个值得放在其的右边

当root==NULL的时候,就说明找到了插入的位置,则创建一个新的节点,放入值,并且返回.

代码实现:

class Solution {
public:
    TreeNode* insertIntoBST(TreeNode* root, int val) {
        if(root==NULL)return new TreeNode(val);
        if(root->val<val)root->right=insertIntoBST(root->right,val);
        if(root->val>val)root->left=insertIntoBST(root->left,val);
        return root;
    }
};

题目:450. 删除二叉搜索树中的节点

题解:

如果是一颗普通的二叉树,想要删除其左/右节点,则让其root->left/root->right=NULL即可 也就是递归返回值为NULL(在不考虑内存泄漏的情况下)

那如果是一颗BST,那就要保证删除时,其性质不变,仍然是一颗BST;

这里仍然需要find,但因为前面说过了,就不过多赘述. 

那么分几种情况来讨论

1.删除的节点为一个叶子节点:那么直接返回NULL即可.这样并不会影响其性质

2.删除的节点为一个仅有左子树/右子树的节点:则直接返回其左子树/右子树即可

 3.删除的节点为一个仅有左子树/右子树的节点:

则需要找到其右子树中最小的值(也就是右子树中的左叶子)

其值会比所有左子树的节点大,也会比所有右子树节点小.

之后将其值赋值给刚刚找到的目标节点,现在要做的就是去目标节点的右子树中删除刚刚的叶子节点,也就变成了情况1

 

代码实现:

class Solution {
public:
    TreeNode*find(TreeNode* root)
    {
        if(!root->left)return root;

        return find(root->left);
    }
    TreeNode* deleteNode(TreeNode* root, int key) {
        //find
        if(root==NULL)return NULL;
        if(root->val==key)
        {
            //delete
            if(!root->left&&!root->right)
            {
                return NULL;
            }
            else if(!root->left)
            {
                return root->right;
            }
            else if(!root->right)
                return root->left;
            TreeNode *tmp=find(root->right);
            root->val=tmp->val;
            root->right=deleteNode(root->right,tmp->val);
        }
        else if(root->val<key)root->right=deleteNode(root->right, key);
        else if(root->val>key)root->left=deleteNode(root->left, key);
        return root;
    }
};

完结撒花:

🌈本篇博客的内容【你真的会二叉树了嘛? --二叉树LeetCode专题Ⅳ】已经结束。

🌈若对你有些许帮助,可以点赞、关注、评论支持下博主,你的支持将是我前进路上最大的动力。

🌈若以上内容有任何问题,欢迎在评论区指出。若对以上内容有任何不解,都可私信评论询问。

🌈诸君,山顶见!

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

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

相关文章

C# 文件操作

一 File\FileInfo类 在.NETFramework提供的文件操作类基本上都位于System.IO的命名空间下。操作硬盘文件常用的有两个类File\FileInfo. File类主要是通过静态方法实现的&#xff0c;FileInfo类是通过实例方法。 File类核心成员&#xff1a; FileInfo类的实例成员提供了与Fil…

Redis实现分布式锁的7种方案,及正确使用姿势!

redis学习笔记 7种方案前言 日常开发中&#xff0c;秒杀下单、抢红包等等业务场景&#xff0c;都需要用到分布式锁。而Redis非常适合作为分布式锁使用。本文将分七个方案展开&#xff0c;跟大家探讨Redis分布式锁的正确使用方式。如果有不正确的地方&#xff0c;欢迎大家指出…

c盘如何扩展分区?C盘满了这么处理就对了

案例分享&#xff1a;“c盘如何扩展分区&#xff1f;我的电脑C盘前几天都还有50GB&#xff0c;这几天发现越来越小了&#xff0c;电脑也越来越卡顿了&#xff0c;为什么我的C盘突然就满了呢&#xff1f;那么我该怎么解决这个问题&#xff1f;请求大神的帮助&#xff01;” 在使…

C++内存管理详解

大家好&#xff0c;这里是bang_bang&#xff0c;今天来分享下内存管理的知识。 目录 1.C/C内存分布 2.C内存管理方式 2.1new/delete操作内置类型 2.2new/delete操作自定义类型 3.operator new与operator delete函数 3.1operator new 3.2operator delete 4.new和delete的实现…

【C++进阶之路】初始C++语法(上)

文章目录前言一.命名空间命名冲突命名空间的使用展开命名空间作用域限定符访问作用域命名空间的合并命名空间的嵌套二.输入输出打印流插入运算符输入流提取运算符三.缺省参数全缺省半缺省跨文件缺省函数参数缺省参数的使用格式四.函数重载参数个数不同参数类型不同参数顺序不同…

ubuntu20 qt6.4.3 ustc镜像安装 xdma

文件下载地质 命令 ./qt-unified-linux-x64-4.5.2-online.run --mirror https://mirrors.ustc.edu.cn/qtproject没有镜像就下砸错误hash verification while downloading,this is temporary error,please retry 部分安装器不支持 --mirror cd ~/workspace/dma_ip_drivers/X…

RCIE练习题2之BGP4+配置

R4-R10共7台设备,运行BGP 4+路由协议,其中R4和R5、R6之间为EBGP邻居,其余设备之间为IBGP邻居,将R4 loopback 0的IPv6地址通过重分发方式引入BGP 4+,不得引入多余路由,在R5-R10上均可学习到R4的loopback 0 IPv6地址,同时通过合适配置使得R4上能够学习到R5-R10的loopback …

Excel技能之数据验证,总有一款适合你

用户填写的内容&#xff0c;是未知的&#xff0c;不可靠的。但是&#xff0c;我们要对数据的规范、格式、条件做出限制&#xff0c;既能保证数据的质量&#xff0c;也能统一每个人的行为。最大限度去避免垃圾数据的录入&#xff0c;眼不见心不烦&#xff0c;让心情美美的。 数…

Cont. DB Project ----- MySQL Python Project

Function achieve &#xff08;Cont.&#xff09; Item Search 添加一个新函数search_item&#xff0c;用于实现商品搜索的功能。参数&#xff1a;keyword (为了模糊查询) # search items by keywords def search_item(keyword):cursor, db connect_database()sql f"SE…

milovski-V-XXXXXX勒索病毒数据恢复|金蝶、用友、管家婆、OA、速达、ERP等软件数据库恢复

目录 前言&#xff1a; 一、勒索病毒milovski-V-XXXXXXXX的危害 二、milovski-V-XXXXXXXX勒索病毒的数据恢复方法 三、milovski-V-XXXXXXXX勒索病毒加密数据恢复案例 四、如何防范勒索病毒攻击 前言&#xff1a; 在当今互联网时代&#xff0c;勒索病毒已成为企业信息安全面…

掌握机器学习中的“瑞士军刀”XGBoost,从入门到实战

文章目录1 XGBoost简介2 XGBoost的算法优势3 安装XGBoost库4 回归模型5 分类模型6 XGBoost调参作为机器学习领域中的“瑞士军刀”&#xff0c;XGBoost在各大数据科学竞赛中屡获佳绩。本篇博客将为大家介绍如何使用Python中的XGBoost库&#xff0c;从入门到实战掌握XGBoost的使用…

iot-Scada免费Scada组态软件系列教程4-二次开发与版本部署

iot-Scada免费Scada组态软件系列教程 系列文章目录 iot-Scada免费Scada组态软件系列教程1-初识iot-Scada iot-Scada免费Scada组态软件系列教程2-架构设计 iot-Scada免费Scada组态软件系列教程3-各模块详细介绍 iot-Scada免费Scada组态软件系列教程4-二次开发与版本部署 前言…

p73 应急响应-WEB 分析 phpjavaweb自动化工具

数据来源 应急响应&#xff1a; 保护阶段&#xff08;护案发现场&#xff0c;断网防止持续渗透&#xff0c;数据备份恢复&#xff09;&#xff0c;分析阶段&#xff08;找到漏洞&#xff09;&#xff0c;复现阶段&#xff08;复现攻击过程&#xff09;&#xff0c;修复阶段&am…

QML控件--DialogButtonBox

文章目录一、控件基本信息二、控件使用三、属性成员四、附加属性成员五、成员函数六、信号一、控件基本信息 Import Statement&#xff1a;import QtQuick.Controls 2.14 Since&#xff1a;Qt 5.8 Inherits&#xff1a;Container 二、控件使用 DialogButtonBox&#xff1a;是…

基于 VITA57.4 标准的单通道 6GSPS 12 位采样 ADC,单通道 6GSPS 16 位采样 DAC 子卡模块

概述 FMC147 是一款单通道 6.4GSPS&#xff08;或者配置成 2 通道 3.2GSPS&#xff09;采样率的 12 位 AD 采集、单通道 6GSPS&#xff08;或配置成 2 通道 3GSPS&#xff09; 采样率 16 位 DA 输出子卡模块&#xff0c;该板卡为 FMC标准&#xff0c;符合 VITA57.4 规范&#x…

业务项目管理软件使用推荐

使用Zoho Projects的运营项目管理简化任务并最大限度地利用资源&#xff0c;该管理已被全球200,000多家公司选中。 一、带领您的团队取得更好的成果 Zoho Projects的多功能业务项目管理软件可帮助您的团队在所有运营流程中保持一致。监控您的运营团队的工作流程以确保每个项目顺…

IGKBoard(imx6ull)-Linux下TTY串口编程

文章目录一、TTY介绍&#xff08;1&#xff09;理解tty&#xff08;2&#xff09;tty设备节点二、tty串口应用编程&#xff08;1&#xff09;串口基本操作【1】打开串口【1】读写数据【1】关闭串口&#xff08;2&#xff09;termios 结构体&#xff08;配置&#xff09;&#x…

如何处理后端返回的复杂数据

将接口的复杂数据结构映射成简单的数据结构 假设我们有一个API&#xff0c;返回以下数据&#xff1a; {"id": 1,"name": "Example API","process_params": {"param1": {"name": "Parameter 1","…

企业数字化转型有哪些好处?

从马车到汽车&#xff0c;从写信到智能手机&#xff0c;每一次技术革新所带来的都是生产力大发展&#xff0c;小到个人、家庭&#xff0c;大到企业、国家&#xff0c;都在每一轮技术革新中获得了好处。 可以说&#xff0c;现在的企业数字化转型&#xff0c;就像是企业管理“工具…

从0学习stm32

1.STM32介绍&#xff1a; ST&#xff1a;指的是意法半导体&#xff1b; M&#xff1a;指定微处理器 使用的是ARMCortex-M3 ARM分成三个系列&#xff1a; Cortex-A: 针对多媒体应用(手机) Cortex-R:针对对实时性和性能有一定要求的场景 Cortex-M&#xff1a;针对低功耗高性…