刚学完二叉树,来试试这些oj题练练手吧!

这篇具有很好参考价值的文章主要介绍了刚学完二叉树,来试试这些oj题练练手吧!。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

刚学完二叉树,来试试这些oj题练练手吧!,刷题集,数据结构,算法,c语言

🎈个人主页:🎈 :✨✨✨初阶牛✨✨✨
🐻推荐专栏1: 🍔🍟🌯C语言初阶
🐻推荐专栏2: 🍔🍟🌯C语言进阶
🔑个人信条: 🌵知行合一
🍉本篇简介:>:记录力扣的一些有关二叉树的入门题目.分享解题经验.
c语言实现:单值二叉树,相同的树,对称二叉树
金句分享:
✨总不能一生碌碌无为,还安慰自己平凡可贵吧.✨

前言

二叉树 主要就是玩递归,相信大家学完 二叉树 以后,对递归有了更加深层的理解,可以试着做几道oj题,练一下手.

一、单值二叉树

声明:
题目来源于–力扣
题目链接: 传送门

题目描述:

如果 二叉树 每个节点都具有相同的值,那么该 二叉树 就是 单值二叉树
给定一棵树,如果这棵树是 单值二叉树 时,
返回 true
否则返回 false

示例1:
刚学完二叉树,来试试这些oj题练练手吧!,刷题集,数据结构,算法,c语言

输入:[1,1,1,1,1,null,1]
输出:true

示例2:
刚学完二叉树,来试试这些oj题练练手吧!,刷题集,数据结构,算法,c语言

输入:[2,2,2,5,2]
输出:false

解题思路:

  1. 递归结束条件,遇到NULL返回true
  2. 判断根节点的值与左子树的值是否相等.
    不相等返回false
  3. 判断根节点的值与右子树的值是否相等.
    不相等返回false
  4. 返回递归遍历这颗树的逻辑值.

代码实现:

bool isUnivalTree(struct TreeNode* root){
    if(root==NULL)
    {
        return true;
    }
    //判断根节点的值与左子树的值是否相等.
    if(root->left&&root->val!=root->left->val)
    {
        return false;
    }
    //判断根节点的值与右子树的值是否相等.
    if(root->right&&root->val!=root->right->val) 
    {
        return false;
    }
    return isUnivalTree(root->left)&&isUnivalTree(root->right);
}

提交记录:
刚学完二叉树,来试试这些oj题练练手吧!,刷题集,数据结构,算法,c语言

二、相同的树

声明:
题目来源于–力扣
题目链接: 传送门

题目介绍:

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

如果两个在结构上相同,并且节点具有相同的值,则认为它们是相同的。
相同返回:true
不同返回:false

示例1:
刚学完二叉树,来试试这些oj题练练手吧!,刷题集,数据结构,算法,c语言

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

示例2:
刚学完二叉树,来试试这些oj题练练手吧!,刷题集,数据结构,算法,c语言

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

解题思路

  1. 先考虑两棵树其中一棵为NULl的情况,返回false
    (注意不是指一整颗树为NULl,而是指一方节点).
    例如:
    示例2中,第一颗树的左子树是值为2的结点,但是第二棵树的左子树是NULL.

  2. 两棵树都为NULL,返回true

  3. 判断两颗树的结点值是否相等.
    不相等则返回false

  4. 返回最后遍历结果的逻辑值.

代码实现:

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

提交记录:
刚学完二叉树,来试试这些oj题练练手吧!,刷题集,数据结构,算法,c语言

三、对称二叉树

声明:
题目来源于–力扣
题目链接:

题目介绍:

给你一个 二叉树 的根节点 root , 检查它是否轴对称。
对称:返回true.
不对称:返回false

刚学完二叉树,来试试这些oj题练练手吧!,刷题集,数据结构,算法,c语言

输入:root = [1,2,2,3,4,4,3]
输出:true

刚学完二叉树,来试试这些oj题练练手吧!,刷题集,数据结构,算法,c语言

输入:root = [1,2,2,null,3,null,3]
输出:false

解题思路:

难点在于,对称 二叉树 是需要遍历到左子树之后,回到根节点,去与右子树比较,为了实现这一要求,我们可以另写一个函数,直接将这棵树用两个root访问.从最开始的根节点开始,将这颗 二叉树 切割为 二叉树 .

  1. 创建一个子函数check.参数为(struct TreeNode* root1,struct TreeNode* root2)
  2. 先判断这两颗树的根节点是否为NULL.为空则直接返回true.
  3. 一方为NULl时:返回false.
  4. 判断root1的值和root2的值是否相等.
  5. root1递归时先访问其左子树,root2递归时先访问其右子树.
  6. root1递归 后访问右子树,root2递归 后访问左子树.
  7. 返回递归结果的逻辑值.

代码实现

bool check(struct TreeNode* root1,struct TreeNode* root2)
{
    if(root1==NULL&&root2==NULL)
       return true;
    //上面已经判断了都为NULL时的情况,则此时判断如果一方为空
    if(root1==NULL||root2==NULL)
        return false;
    if(root1->val!=root2->val)
        return false;
       //注意这里的递归顺序,重点
    return check(root1->left,root2->right)&& check(root1->right,root2->left);
}
bool isSymmetric(struct TreeNode* root){
   return check(root,root);
}

提交记录:
刚学完二叉树,来试试这些oj题练练手吧!,刷题集,数据结构,算法,c语言

练习完这几道oj题,相信大家对二叉树有了更深层的理解了.
如果文章有帮助的话,可以给牛牛来一个一键三连吗?
刚学完二叉树,来试试这些oj题练练手吧!,刷题集,数据结构,算法,c语言文章来源地址https://www.toymoban.com/news/detail-517944.html

到了这里,关于刚学完二叉树,来试试这些oj题练练手吧!的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 二叉树OJ题:LeetCode--104.二叉树的最大深度

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

    2024年02月11日
    浏览(83)
  • 二叉树OJ题:LeetCode--144.二叉树的前序遍历

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

    2024年02月13日
    浏览(41)
  • 二叉树(OJ)

    ---------------------------------------------------哆啦A梦的任意门------------------------------------------------------- 我们来看一下题目的具体要求:  既然我们都学了二叉树了,我们就应该学会如何去递归。 分析一下: 我们如果去用遍历的思路去做,肯定是可以做出来的,遍历嘛,先将第一

    2023年04月12日
    浏览(38)
  • 二叉树基础oj题目

    前文中,介绍了二叉树的基本概念及基础操作,进一步对于二叉树的递归遍历及子问题的处理思想有了一定的了解。本文将带来几道二叉树经典的oj题目。 对称二叉树 平衡二叉树 二叉树的层序遍历 leetcode题目链接 题目描述:给你一个二叉树的根节点 root , 检查它是否轴对称

    2024年01月21日
    浏览(44)
  • Leetcode-二叉树oj题

    144. 二叉树的前序遍历 https://leetcode.cn/problems/binary-tree-preorder-traversal/ 这个题目在遍历的基础上还要求返回数组,数组里面按前序存放二叉树节点的值。 既然要返回数组,就必然要malloc一块空间,那么我们需要算出这个二叉树的节点个数,所以就创建一个函数TreeSize求出节点

    2024年02月05日
    浏览(37)
  • 每日OJ题_二叉树dfs③_力扣814. 二叉树剪枝

    目录 力扣814. 二叉树剪枝 解析代码 814. 二叉树剪枝 难度 中等 给你二叉树的根结点  root  ,此外树的每个结点的值要么是  0  ,要么是  1  。 返回移除了所有不包含  1  的子树的原二叉树。 节点  node  的子树为  node  本身加上所有  node  的后代。 示例 1: 示例 2: 示

    2024年02月22日
    浏览(41)
  • 数据结构——二叉树(OJ练习)

    大家好,本期是二叉树的最后一期,这一期我们来看看二叉树的编程题 . - 力扣(LeetCode) 首先我们的思路是: 遍历二叉树,把每个节点去比较一次,按照要求返回 我们来看代码 . - 力扣(LeetCode) 这里我们的思路是:同时遍历两给树,遇到空树或者不相等时返回。 . - 力扣

    2024年04月12日
    浏览(43)
  • 【深入理解二叉树OJ题】

    航班直达! 前序遍历的思想。 思路:先判断左右节点是否存在,再判断根分别和左右节点的值是 否相等。 1.如果左子节点存在,但是值不等于根节点的值,返回false 2.如果右子节点存在,但是值不等于根节点的值,返回false 如果相等,递归其左子节点和右子节点。 不拿如果

    2023年04月18日
    浏览(38)
  • 二叉树OJ题(C++实现)

    二叉树的层序遍历 OJ连接 主要思路是借助一个队列,将每一层的数据以size统计,当size为0时说明该层数据已经输入完,将这一层的数据传入vector中,再通过push_back 传入 vector vector int 中 二叉树的最近公共祖先OJ连接 共分为三种情况 第一种情况 寻找节点7与0的公共祖先为 根节

    2023年04月27日
    浏览(44)
  • 二叉树基础oj题自测

    解题思路: 遍历二叉树,并且每一个节点值都和根节点的值进行比对,如果不等于根节点的值,则不是单值树。 解题思路: 首先比较根节点是否相同,然后分别比较左右子树是否相同。 解题思路: 判断一个树是否对称,首先要判断左右孩子是否对称相等,还需要判断左孩

    2023年04月17日
    浏览(35)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包