【leetcode】相同的树➕对称二叉树➕另一棵树的子树

大家好,我是苏貝,本篇博客带大家刷题,如果你觉得我写的还不错的话,可以给我一个赞👍吗,感谢❤️
在这里插入图片描述


一. 相同的树

点击查看题目

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

思路:

在这里插入图片描述

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);
}

二. 对称二叉树

点击查看题目

在这里插入图片描述
在这里插入图片描述

思路:

在这里插入图片描述

这道题同相同的树相似,只不过相同的树是比较2个树的同侧子树,而这道题是比较不同侧子树

bool _isSymmetric(struct TreeNode* p,struct TreeNode* q){
    //p q都为空
    if(p==NULL&&q==NULL)
        return true;
    //p和q有一个为空
    if(p==NULL||q==NULL)
        return false;
    //p和q的值不同
    if(p->val!=q->val)
        return false;
    //p和q的值相同,再比较它们的不同侧子树
    return _isSymmetric(p->left,q->right)&&
       _isSymmetric(p->right,q->left);
}

bool isSymmetric(struct TreeNode* root) {
    return _isSymmetric(root->left,root->right);
}

三. 另一棵树的子树

点击查看题目

在这里插入图片描述
在这里插入图片描述

思路:

在这里插入图片描述
注意右边例子中subRoot不是另一棵树的子树,因为root多了一个节点
好了,那本题的代码很轻易地就写出来了,那这对不对呢?

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);
}

bool isSubtree(struct TreeNode* root, struct TreeNode* subRoot){
    if(root==NULL)
        return false;
    if(root->val==subRoot->val)
        return isSameTree(root,subRoot);
    return isSubtree(root->left,subRoot)
        ||isSubtree(root->right,subRoot);
}

在这里插入图片描述
很遗憾,这是错的。为什么呢?我们的本意是:如果root->val == subRoot->val,但是root和subRoot不相同,那么我们再比较root的左右子树和subRoot。基于这个想法,我们再仔细看代码,发现当root->val==subRoot->val时,返回的是isSameTree(root,subRoot)的值,那么如果返回false,我们会直接跳过root的子树而返回root的双亲结点(以下图的两个树为例)

在这里插入图片描述
在这里插入图片描述

所以我们在root->val==subRoot->val时不能返回isSameTree(root,subRoot)的值,而是当它的值为true时返回true,否则再比较左右子树。代码如下:

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);
}

bool isSubtree(struct TreeNode* root, struct TreeNode* subRoot){
    if(root==NULL)
        return false;
    if(root->val==subRoot->val)
        {
            if(isSameTree(root,subRoot))
                return true;
        }
    return isSubtree(root->left,subRoot)
        ||isSubtree(root->right,subRoot);
}

也有一种简写的方法,思路一样

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);
}

bool isSubtree(struct TreeNode* root, struct TreeNode* subRoot){
    if(root==NULL)
        return false;
    
    return isSameTree(root,subRoot)
        ||isSubtree(root->left,subRoot)
        ||isSubtree(root->right,subRoot);
}

好了,那么本篇博客就到此结束了,如果你觉得本篇博客对你有些帮助,可以给个大大的赞👍吗,感谢看到这里,我们下篇博客见❤️

最近更新

  1. TCP协议是安全的吗?

    2024-03-13 17:36:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-13 17:36:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-13 17:36:02       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-13 17:36:02       20 阅读

热门阅读

  1. 题目 2701: 取模

    2024-03-13 17:36:02       22 阅读
  2. 2024年AI辅助研发:科技创新的引领者

    2024-03-13 17:36:02       24 阅读
  3. C#面:简单介绍枚举

    2024-03-13 17:36:02       23 阅读
  4. 3月12日做题总结(C/C++真题)

    2024-03-13 17:36:02       21 阅读
  5. Flask python 开发篇:配置文件

    2024-03-13 17:36:02       20 阅读
  6. Linux编程4.1 网络编程-前导

    2024-03-13 17:36:02       22 阅读
  7. Fastjson 1.2.24反序列化漏洞(Vulhub)使用方法

    2024-03-13 17:36:02       23 阅读
  8. Android硬件获取序列号sn适配Android9+

    2024-03-13 17:36:02       21 阅读
  9. HDFS面试重点

    2024-03-13 17:36:02       25 阅读
  10. 如何水文章:嚼口香糖是否会变瘦?

    2024-03-13 17:36:02       25 阅读