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

简介: 这题算是简单题,我们依然从最简单的情况来考虑。

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


🌈个人主页:主页链接


🌈算法专栏:专栏链接


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


🌈LeetCode专栏:专栏链接


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


🌈代码仓库:Gitee链接


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


呜呜呜呜 今天被蓝桥杯爆杀了


809c89c988374fe381cdefdcb34edbf4.jpg


题目:100. 相同的树


d4aade2feb1b4821ba81dddef1e82af8.png


题解:


这题算是简单题,我们依然从最简单的情况来考虑。


如果只有一个节点的时候:怎么判断这两个节点是否相等呢?

首先,先判断其左右根的属性是否相同.

属性的含义是:其是否都有左右根,若没有,则没有是否没有同一边

其次再进行判断,这个点的值是否相等.

这样就完成了对一个节点的判断,我们只需要一一比较这两棵树的节点是否相同,就能比较出来了


bd16601edd3f4b958d9ab60c1eced47c.jpg


代码实现:


struct TreeNode {
     int val;
     struct TreeNode *left;
      struct TreeNode *right;
 };
#include<iostream>
using namespace std;
bool isSameTree(struct TreeNode* p, struct TreeNode* q){
    if(p==NULL&&q==NULL)return true;
    if(p==NULL||q==NULL)return false;
    if(p->val!=q->val)return false;
    return (isSameTree(p->left,q->left)&&isSameTree(p->right,q->right));
}   


题目:572. 另一棵树的子树


79cff0cabe22478384cea3bc9876799d.png


题解:


这题与上面那题大同小异,寻找一棵树的子树,


我们可以把问题拆分为:这颗树的子树与subroot是否相等,这样就又变成了,上面那个问题.

如何判断两棵树是否相等.(只是多了一个遍历每颗子树的过程)

废话不多说,我们直接来看代码吧


代码实现:


#include<iostream>
using namespace std;
struct TreeNode {
     int val;
     struct TreeNode *left;
     struct TreeNode *right;
};
bool isSameTree(struct TreeNode* p, struct TreeNode* q)
{
    if(!p&&!q)return true;
    if(!p||!q)return false;
    if(p->val!=q->val)return false;
    return isSameTree(p->left, q->left)&&isSameTree(p->right, q->right);
}
bool isSubtree(struct TreeNode* root, struct TreeNode* subRoot){
    if(root==NULL)return false;
    if(isSameTree(root, subRoot))return true;
    return isSubtree(root->left,subRoot)||isSubtree(root->right, subRoot);
}


题目:236. 二叉树的最近公共祖先


a923b4a2898e44a48dfe78eaf1ff4c5a.png


题解:


依旧先看看基础情况,若访问的这个节点与p或者q相同,则说明找到了他,则直接返回就可以了.


之后再判断是否两边都找到了


若两边都找到了,则说明left与right最近的公共节点就是当前访问的这个节点root.


18410bb08d5d49fb8559727afa7f90a8.jpg


若只有一边找到了,则说明这其中一个节点可能做为另一个节点的根,则直接返回根节点(left,right)即可


81e3b15736a44e51bb87a17f8c005eb4.jpg


之后再加入递归的元素,依次遍历访问每棵树的左节点称为left


                                    依次遍历访问每棵树的右节点称为right


若出现以上三种情况.则不为空.


代码实现:


#include<iostream>
using namespace std;
struct TreeNode {
      int val;
      TreeNode *left;
      TreeNode *right;
 };
class Solution {
public:
    TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
        if(root==NULL||root->val==p->val||root->val==q->val)return root;
        TreeNode* left=lowestCommonAncestor(root->left,  p, q);
        TreeNode*right=lowestCommonAncestor(root->right,p,q);
        if(left!=NULL&&right!=NULL)return root;
        if(right==NULL)return left;
        if(left==NULL)return right;
        return NULL;
    }
};


完结撒花:


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


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


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


🌈诸君,山顶见!

目录
相关文章
|
5天前
|
云安全 人工智能 安全
AI被攻击怎么办?
阿里云提供 AI 全栈安全能力,其中对网络攻击的主动识别、智能阻断与快速响应构成其核心防线,依托原生安全防护为客户筑牢免疫屏障。
|
15天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
9天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
589 212
|
4天前
|
编解码 Linux 数据安全/隐私保护
教程分享免费视频压缩软件,免费视频压缩,视频压缩免费,附压缩方法及学习教程
教程分享免费视频压缩软件,免费视频压缩,视频压缩免费,附压缩方法及学习教程
233 138
|
存储 人工智能 监控
从代码生成到自主决策:打造一个Coding驱动的“自我编程”Agent
本文介绍了一种基于LLM的“自我编程”Agent系统,通过代码驱动实现复杂逻辑。该Agent以Python为执行引擎,结合Py4j实现Java与Python交互,支持多工具调用、记忆分层与上下文工程,具备感知、认知、表达、自我评估等能力模块,目标是打造可进化的“1.5线”智能助手。
827 60
|
7天前
|
人工智能 移动开发 自然语言处理
2025最新HTML静态网页制作工具推荐:10款免费在线生成器小白也能5分钟上手
晓猛团队精选2025年10款真正免费、无需编程的在线HTML建站工具,涵盖AI生成、拖拽编辑、设计稿转代码等多种类型,均支持浏览器直接使用、快速出图与文件导出,特别适合零基础用户快速搭建个人网站、落地页或企业官网。
1190 157
|
6天前
|
存储 安全 固态存储
四款WIN PE工具,都可以实现U盘安装教程
Windows PE是基于NT内核的轻量系统,用于系统安装、分区管理及故障修复。本文推荐多款PE制作工具,支持U盘启动,兼容UEFI/Legacy模式,具备备份还原、驱动识别等功能,操作简便,适合新旧电脑维护使用。
499 109