当前位置: 首页 > 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);

}

刷题总结

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

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

http://www.lryc.cn/news/392044.html

相关文章:

  • 【selenium 】操作元素
  • 【MySQL】事务实现原理
  • 面向物联网行业的异常监控追踪技术解决方案:技术革新与运维保障
  • 守护厨房空气:全面排查与修复油烟净化器跳闸问题
  • 【微服务网关——https与http2代理实现】
  • mssql查询历史执行过的语句日志
  • 【LeetCode】每日一题:买卖股票的最佳时机 II
  • 【TS】TypeScript 联合类型详解:解锁更灵活的类型系统
  • kali改回官方源后更新失败
  • Mysql 左关联(LEFT JOIN)
  • [笔记]小米CyberDog机器狗仿真调试记录
  • 第十四届蓝桥杯省赛C++B组G题【子串简写】题解(AC)
  • 实现Java Web应用的高性能负载均衡方案
  • 医学预测模型web APP的制作建议
  • gitlab每日备份以及restore
  • 2024-07-05 base SAS programming学习笔记9(variables)
  • kafka--发布-订阅消息系统
  • 2024最新软件测试面试题。内附答案+文档
  • 新加坡很火的slots游戏代投Facebook广告新流量趋势
  • C++ 实现字符串逆序
  • 【项目实践】贪吃蛇
  • 将exe文件添加到注册表中,实现开机时自动运行
  • SQL使用注意事项
  • uniapp小程序IOS端,uni.createInnerAudioContext()无声音
  • 第二节-K8s词汇表
  • 命令行运行git reflog(reference log)报错的解决办法
  • python3 imwrite 中文路径不成功解决方法
  • tapd 与国内外主流的8大项目管理软件大对比
  • IP地址配置
  • 【C#】ProgressBar进度条异步编程思想