【LeetCode刷题指南】--单值二叉树,相同的树

🔥个人主页:@草莓熊Lotso

🎬作者简介:C++研发方向学习者

📖个人专栏:************************************************************************************************************************************************************************************************************************************************************《C语言》《数据结构与算法》《C语言刷题集》《Leetcode刷题指南》****************************************************************************************************************************************************************************************************************************************************************

⭐️人生格言:生活是默默的坚持,毅力是永久的享受。

前言:在之前的C语言刷题集中我们刷了很多IO类型的基础编程题,但是随着数据结构往后的学习以及企业面试的要求,我们还需要对接口型的题目进行练习,博主在这里准备了新的《LeetCode刷题指南》专栏给大家分享一些我自己在力扣上面写过的题目,提供一些我的解题思路。个人实力有限,欢迎大家补充和指正。


目录

一.单值二叉树

解题过程:

代码实现:

二.相同的树

解题过程:

代码实现:


一.单值二叉树

题目链接: 965. 单值二叉树 - 力扣(LeetCode)

题目描述:

题目描述:

**思路:**递归

解题过程:

1.如果root为空返回true

2.如果root非空我们就判断其左右孩子不为空时值是否跟根结点值相等,如果不相等就返回false

3.我们需要递归判断子树和右子树是否都为单值二叉树

具体过程如图所示:

复杂度:

  • 时间复杂度: O(n)
  • 空间复杂度: O(n)

代码实现:

cpp 复制代码
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */
bool isUnivalTree(struct TreeNode* root) {
    if(root==NULL)
    {
        return true;
    }
    //root非空,root和左右孩子的值比较
    if(root->left&&root->left->val!=root->val)
    {
        return false;
    }
    if(root->right&&root->right->val!=root->val)
    {
        return false;
    }

    return isUnivalTree(root->left)&&isUnivalTree(root->right);
}

二.相同的树

题目链接: 100. 相同的树 - 力扣(LeetCode)

题目描述:

题目示例:

思路: 递归

解题过程:

1.p和q都为空时返回true,只有一个为空时返回false

2.如果都不为空就比较两个结点的值,值不相等就返回false

3.递归判断左右子树是否都为相同的树

具体过程图示如下:

复杂度:

  • 时间复杂度: O(n)
  • 空间复杂度: O(n)

代码实现:

cpp 复制代码
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */
bool isSameTree(struct TreeNode* p, struct TreeNode* q) {
    //p和q都为空
    if(p==NULL && q==NULL)
    {
        return true;
    }
    //p和q只有一个为空,前面提前判断过全为空处理了
    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);
}

往期回顾:

【LeetCode刷题指南】--随机链表的复制

【LeetCode刷题指南】--有效的括号

【LeetCode刷题指南】--队列实现栈,栈实现队列

结语:本篇文章就到此结束了,《LetetCode刷题指南》中的题目比起之间的C语言刷题集中的题目,肯定会更加复杂一些。而且题目形式也不一样,大家需要注意一下。如果文章对你有帮助的话,欢迎评论,点赞,收藏加关注,感谢大家的支持。

相关推荐
探物 AI9 小时前
机器人清理墙角蜘蛛网,背后需要哪些算法?——从视觉分割到贴墙力控
算法·机器人
青 春 记 忆9 小时前
LeetCode 226. 翻转二叉树|Python 解法详解
python·算法·leetcode
民乐团扒谱机9 小时前
【微科普】压缩感知(CS):违反了奈奎斯特采样定理?不先采集也能还原信号?大白话讲透稀疏采样、L1重建与OMP,一文吃透附代码
python·神经网络·线性代数·算法·数学建模·压缩感知·奈奎斯特
88号技师9 小时前
2026年SCI-分数牛顿衍生优化算法Fractional Newton-derived optimizer-附Matlab免费代码
开发语言·算法·数学建模·matlab·优化算法
夏玉林的学习之路10 小时前
算法7.链式栈
算法
啊嘞嘞?10 小时前
力扣(回文链表)
算法·leetcode·链表
Awh-10 小时前
数据结构 第六章:哈希存储
数据结构·算法·哈希算法
M78佐菲10 小时前
Linux学习笔记:目录IO与帧缓冲
linux·笔记·学习·算法
玫瑰互动GEO10 小时前
抖音SEO优化技术拆解:搜索排名四大因子与4步落地算法分析
人工智能·算法·搜索引擎·语音识别
Interview Aid11210 小时前
Akuna OA 题目拆解|三题思路复盘
linux·运维·算法·面试·职场和发展