【Leetcode】相同的树、对称二叉树、另一颗树的子树

这篇具有很好参考价值的文章主要介绍了【Leetcode】相同的树、对称二叉树、另一颗树的子树。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

💡相同的树

题目描述

思路:

代码:

💡对称二叉树

题目描述

思路:

代码:

💡另一棵树的子树

题目描述

思路:

代码:

💡总结



【Leetcode】相同的树、对称二叉树、另一颗树的子树,数据结构,leetcode,算法,数据结构

 

💡相同的树

题目描述

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

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

【Leetcode】相同的树、对称二叉树、另一颗树的子树,数据结构,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!=NULL&&q==NULL)
    return false;

    if(p->val==q->val)
    {
    return isSameTree(p->right,q->right)&&isSameTree(p->left,q->left);
    }
    return false;
}

💡对称二叉树

题目描述

给你一个二叉树的根节点 root , 检查它是否轴对称。

提示:

  • 树中节点数目在范围 [1, 1000] 内
  • -100 <= Node.val <= 100

思路:

这个题实际上也是判断相同的树,只不过是判断对称轴左边的左子树与对称轴右边的右子树是否相同和判断对称轴左边的右子树与对称轴右边的左子树子树是否相同(也是需要分解称为多个子问题)。

代码:

bool isSameTree(struct TreeNode* p, struct TreeNode* q) {
    if(p==NULL&&q==NULL)
    return true;
    if(p==NULL&&q!=NULL)
    return false;
    if(p!=NULL&&q==NULL)
    return false;

    if(p->val==q->val)
    {
    return isSameTree(p->right,q->left)&&isSameTree(p->left,q->right);
    }
    else
    {
        return false;
    }
}
bool isSymmetric(struct TreeNode* root) {
    return isSameTree(root->left,root->right);
}

💡另一棵树的子树

题目描述

给你两棵二叉树 root 和 subRoot 。检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树。如果存在,返回 true ;否则,返回 false 。

二叉树 tree 的一棵子树包括 tree 的某个节点和这个节点的所有后代节点。tree 也可以看做它自身的一棵子树。

提示:

  • root 树上的节点数量范围是 [1, 2000]
  • subRoot 树上的节点数量范围是 [1, 1000]
  • -104 <= root.val <= 104
  • -104 <= subRoot.val <= 104

思路:

这个题目不难,但是有一个坑,就是当遇到值相等时,就很容易直接判断为true,实际上并不能这样判断,然后把图中4对应的左孩子改为4,那么很显然,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!=NULL&&q==NULL)
    return false;

    if(p->val==q->val)
    {
    return isSameTree(p->right,q->right)&&isSameTree(p->left,q->left);
    }
    else
    {
        return false;
    }
}
bool isSubtree(struct TreeNode* root, struct TreeNode* subRoot){
    if(root==NULL)
    return false;
    //if(root->val==subRoot->val)
   // {
    //    if(isSameTree(root,subRoot))          当前根结点的值相等,不代表这两个树相同,要继续遍历,看这个树的子树是否和所给树相同
                                                //比如将root的值该成4
   //     return true;
   // }
    return isSameTree(root,subRoot)
    ||isSubtree(root->left,subRoot)
    ||isSubtree(root->right,subRoot);//有一个为真,就是true
}

💡总结

总的来说,二叉树的相关问题都可以想想看是否能分解为多个相同的子问题来求解,然后在利用递归的思想来完成。文章来源地址https://www.toymoban.com/news/detail-764304.html

到了这里,关于【Leetcode】相同的树、对称二叉树、另一颗树的子树的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【数据结构】单值二叉树 & 相同的树 & 翻转二叉树(五)

      目录 一,单值二叉树 题目详情: 解法:父子比较法 解题思路: 思路实现: 源代码: 二,相同的树 题目详情: 解法:比较法 解题思路: 思路实现: 源代码: 三,翻转二叉树 解法:替换法 解题思路: 思路实现: 源代码: 题目详情: 如果 二叉树 每个节点都具有 相

    2024年02月07日
    浏览(68)
  • 代码随想录额外题目| 二叉树 ●129求根到叶数字之和 ●1382二叉树变平衡●100相同的树

    #129求根到叶数字之和 回溯放进vector,然后从后往前拿,乘1 10 100 ... 很基础的回溯 my code: 随想录跟我思路差不多,但这两个是放globa的:int result; vectorint path; 最近总觉得global不安全不想放  #1382二叉树变平衡 本来遇到这种会换root的就头疼,然后看了眼随想录,是要先变成

    2024年02月14日
    浏览(33)
  • 二叉树OJ题:LeetCode--101.对称二叉树

    朋友们、伙计们,我们又见面了,本期来给大家解读一下LeetCode中第144道二叉树OJ题,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成! 数据结构与算法专栏: 数据结构与算法 个  人  主  页  : stackY、 C 语 言 专 栏 : C语言:从入门到精通 LeetCo

    2024年02月13日
    浏览(49)
  • leetcode 101.对称二叉树

    🌟 leetcode链接:对称二叉树 思路: 这道题和 leetcode 100.相同的树 类似,是上一道的变形题。✨ leetcode 100.相同的树 代码链接:【往期文章】leetcode 100.相同的树。这道题把根的左子树和右子树看作两个不同的树来, 需要注意的是,每次往下递归的时候,是当前 root-left 与 r

    2024年02月17日
    浏览(57)
  • 【LeetCode】101.对称二叉树

    给你一个二叉树的根节点  root  , 检查它是否轴对称。 示例 1: 示例 2: 提示: 树中节点数目在范围  [1, 1000]  内 -100 = Node.val = 100 递归逐渐用得熟练了,其实我感觉它的难点就在于归纳出算法的规律,也就是在什么时候递归。众所周知递归函数中应该包括递归和结束判定

    2024年02月15日
    浏览(45)
  • 【leetcode热题】对称二叉树

    难度: 简单 通过率: 42.2% 题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 给定一个二叉树,检查它是否是镜像对称的。 例如,二叉树  [1,2,2,3,4,4,3]  是对称的。 但是下面这个  [1,2,2,null,3,null,3]  则不是镜像对称的: 说明: 如果你可以运用递归和迭代两种方法

    2024年02月20日
    浏览(34)
  • leetcode 101. 对称二叉树

             这道题要求我们判断一颗二叉树是否是对称的。我使用的是广度优先搜索的思想,通过队列将需要比较的节点依次入队和出队,进行对称性的判断。下面直接上代码:         每次入队入两个节点,并且分别是左右子树的,然后进行对称性的判断,若满足对称条件

    2024年02月11日
    浏览(30)
  • 【Leetcode -101.对称二叉树 -144.二叉树的前序遍历】

    题目:给你一个二叉树的根节点 root , 检查它是否轴对称。 示例 1: 输入:root = [1, 2, 2, 3, 4, 4, 3] 输出:true 示例 2: 输入:root = [1, 2, 2, null, 3, null, 3] 输出:false 提示: 树中节点数目在范围[1, 1000] 内 100 = Node.val = 100 思路 :化为子问题比较左子树和右子树是否对称;结束条

    2024年02月09日
    浏览(50)
  • 【Leetcode】对称二叉树||递归(击败100%)

    step by step. 题目: 给你一棵二叉树的根节点  root  ,翻转这棵二叉树,并返回其根节点。 示例 1: 示例 2: 示例 3: 代码:

    2024年02月13日
    浏览(38)
  • 算法训练day15Leetcode102二叉树层序遍历226翻转二叉树101对称二叉树

    https://www.bilibili.com/video/BV1ue4y1Y7Mf/?vd_source=8272bd48fee17396a4a1746c256ab0ae 层序遍历一个二叉树。就是从左到右一层一层的去遍历二叉树。这种遍历的方式和我们之前讲过的都不太一样。 需要借用一个辅助数据结构即队列来实现,队列先进先出,符合一层一层遍历的逻辑,而用栈先

    2024年01月18日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包