当前位置: 首页 > news >正文

初阶数据结构二叉树练习系列(1)

这个系列的文章将带大家一起刷题,并且总结思路

温馨提示:本篇文章里的练习题仅适合刚学完二叉树的小白使用

相同的树

思路

情况分析:第一种情况:两棵树都为空                         →               返回true

                  第二种情况:一棵树为空,另一棵树不为空→               返回false

                  第三种情况: 两棵树都不为空                     →              判断每个节点的数值是否相同

源代码

bool isSameTree(struct TreeNode* p, struct TreeNode* q) {

    if(q == NULL && p == NULL)

    return true;

    if(q == NULL || p == NULL)

    return false;

    if(p->val != q->val)

    return false;

    return isSameTree(q->left, p->left) && isSameTree(q->right, p->right);

}

变式题

思路上与第一题的一模一样,但不同的是这次需要遍历树的左右叶子,并且判断是否处在相反的位置

思路

情况分析:第一种情况:两棵树都为空                         →               返回true

                  第二种情况:一棵树为空,另一棵树不为空→               返回false

                  第三种情况: 两棵树都不为空                     →              判断每个节点的数值是否相同

源代码

bool _isSymmetric(struct TreeNode* p, struct TreeNode* q)

 {

    if(q == NULL && p == NULL)

    return true;

    if(q == NULL || p == NULL)

    return false;

    if( q->val != p->val)

    return false;

    return _isSymmetric(q->left, p->right) && _isSymmetric(q->right, p->left);

 }

bool isSymmetric(struct TreeNode* root) {

    return _isSymmetric(root->left, root->right);

}

另一棵树的子树

思路

另一棵树的子树

第二种情况: root为空时, 则没有子树可与还在等待比较的树进行比较,因此返回false

第三种情况:root不为空,则先比较根节点的值是否相等,比较完根的节点后,再比较叶子的节点的数值是否相等

源代码

bool isSameTree(struct TreeNode* p, struct TreeNode* q) {

    if(q == NULL && p == NULL)

    return true;

    if(q == NULL || p == NULL)

    return false;

    if(p->val != q->val)

    return false;

    return isSameTree(q->left, p->left) && isSameTree(q->right, p->right);

}

bool isSubtree(struct TreeNode* root, struct TreeNode* subRoot){

   if(root == NULL)

    return false;

    if(root->val == subRoot->val && isSameTree(root, subRoot))

    return true;

   return isSubtree(root->left, subRoot) || isSubtree(root->right,subRoot);

}

刷题总结

从本篇文章中的三道习题以及我自己的刷题中发现,类似于这种类型的题不管考察的是否为二叉树也好还是链表也好,我们都需要考虑它是否为空以及为空时是否可取

好的,本篇文章就先带大家刷到这里,还请各位观众老爷赏个三连,谢谢啦

相关文章:

  • 文件操作及部分文件函数的介绍学习(上)
  • 每天一个数据分析题(三百九十九)- 逻辑回归
  • servlet职称评审系统-计算机毕业设计源码00122
  • 精通SQL Server端口管理:添加与删除监听端口的指南
  • Pycharm的终端(Terminal)中切换到当前项目所在的虚拟环境
  • 入门PHP就来我这(纯干货)08
  • 【工具分享】SQLmap
  • 【pytorch12】什么是梯度
  • 基于SpringBoot的就业信息管理系统
  • MySQL调优
  • 紧急应对!六氟化硫泄漏报警处理全攻略
  • LMT加仿真,十一届大唐杯全国总决赛
  • C语言 do while 循环语句练习 中
  • Docker 容器连接
  • 高级java每日一道面试题-2024年7月5日
  • js继承的实现方法
  • js面向对象
  • js算法-归并排序(merge_sort)
  • 初识 beanstalkd
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • 理解在java “”i=i++;”所发生的事情
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 你真的知道 == 和 equals 的区别吗?
  • 算法-图和图算法
  • 第二十章:异步和文件I/O.(二十三)
  • # SpringBoot 如何让指定的Bean先加载
  • #100天计划# 2013年9月29日
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • $.ajax()
  • $forceUpdate()函数
  • (2024,Flag-DiT,文本引导的多模态生成,SR,统一的标记化,RoPE、RMSNorm 和流匹配)Lumina-T2X
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (二)windows配置JDK环境
  • (附源码)springboot 房产中介系统 毕业设计 312341
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (附源码)计算机毕业设计大学生兼职系统
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  • (强烈推荐)移动端音视频从零到上手(上)
  • (一)80c52学习之旅-起始篇
  • (一)Linux+Windows下安装ffmpeg
  • .NET Core 项目指定SDK版本
  • .net framework4与其client profile版本的区别
  • .Net MVC4 上传大文件,并保存表单
  • .NET MVC第五章、模型绑定获取表单数据
  • .Net OpenCVSharp生成灰度图和二值图
  • .NET 编写一个可以异步等待循环中任何一个部分的 Awaiter
  • .net 简单实现MD5
  • .NET 同步与异步 之 原子操作和自旋锁(Interlocked、SpinLock)(九)
  • .NET/C# 使窗口永不激活(No Activate 永不获得焦点)
  • .NET/C# 使用反射调用含 ref 或 out 参数的方法
  • .NET中winform传递参数至Url并获得返回值或文件
  • [ 隧道技术 ] cpolar 工具详解之将内网端口映射到公网
  • [2018-01-08] Python强化周的第一天
  • [4]CUDA中的向量计算与并行通信模式
  • [Angular] 笔记 20:NgContent