• 力扣第100题 相同的数 c++ 二叉 简单易懂+注释


    题目

    100. 相同的树

    简单

    给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。

    如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。

    示例 1:

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

    示例 2:

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

    示例 3:

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

    提示:

    • 两棵树上的节点数目都在范围 [0, 100] 内
    • -104 <= Node.val <= 104

    思路和解题方法

    1. bool isSameTree(TreeNode* p, TreeNode* q):这是一个名为isSameTree的函数,它接受两个参数pq,分别表示要比较的两个二叉树的根节点。返回值类型为bool,表示两个二叉树是否相同。

    2. if (p == nullptr && q == nullptr):首先判断两个节点pq是否都为空。如果是,则表示这两个子树是相同的,没有节点需要比较,直接返回true

    3. else if (p == nullptr || q == nullptr):如果只有一个节点为空,而另一个节点不为空,这说明这两个子树不相同,因为它们的节点数量不同。在此情况下,直接返回false

    4. else if (p->val != q->val):如果两个节点都不为空,但它们的值不相同,说明这两个子树不相同,直接返回false

    5. else:当两个节点都不为空且它们的值相等时,我们需要进一步比较它们的左右子树。递归调用isSameTree函数,传入左子树的左孩子和右子树的右孩子,以及左子树的右孩子和右子树的左孩子。只有当这两个递归调用都返回true时,才说明整个树是相同的,返回true

    复杂度

            时间复杂度:

                    O(n。c)

    时间复杂度是O(n),其中n表示两个二叉树中节点数的最大值。这个复杂度是因为在最坏情况下,需要访问两个二叉树的所有节点,因此时间复杂度是线性的。

            空间复杂度

                    O(n)

    空间复杂度也是O(n),由于递归调用,每个函数调用都会将一些数据压入堆栈中,因此需要O(n)的空间来存储这些信息(其中n表示树的高度)。在最坏情况下,两个树的高度相同,因此空间复杂度与节点数成正比。

    c++ 代码

    1. class Solution {
    2. public:
    3. // 判断两个二叉树是否相同的函数
    4. bool isSameTree(TreeNode* p, TreeNode* q) {
    5. // 如果两个节点都是空,则表示这两个子树是相同的,直接返回true
    6. if (p == nullptr && q == nullptr) {
    7. return true;
    8. }
    9. // 如果只有一个节点为空,则表示这两个子树不相同,直接返回false
    10. else if (p == nullptr || q == nullptr) {
    11. return false;
    12. }
    13. // 如果两个节点的值不相同,则表示这两个子树不相同,直接返回false
    14. else if (p->val != q->val) {
    15. return false;
    16. }
    17. // 递归比较左右子树的节点,只有左右子树的对应节点都相同时,
    18. // 才表示这两个子树相同,因此需要对两个子树递归调用此函数
    19. else {
    20. return isSameTree(p->left, q->left) && isSameTree(p->right, q->right);
    21. }
    22. }
    23. };

    觉得有用的话可以点点赞,支持一下。

    如果愿意的话关注一下。会对你有更多的帮助。

    每天都会不定时更新哦  >人<  。

  • 相关阅读:
    Unity的IFilterBuildAssemblies:深入解析与实用案例
    alibaba fastjson的JsonObject有序的实现和源码分析
    Java项目:SSM的食堂点餐系统
    治臻新能源冲刺科创板:年营收2.2亿 上汽创投是股东
    CentOS安装双版本MySQL
    React中的路由基础知识(一级路由),5版本的!!!
    第06篇:池化技术
    vue cli npm run build打生产环境包报错Cannot read property ‘pop‘ of undefined
    vite+vue3+ts中使用require.context | 报错require is not defined | 获取文件夹中的文件名
    如何找回回收站清空的文件?
  • 原文地址:https://blog.csdn.net/jgk666666/article/details/133622562