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

【LeetCode数据结构】二叉树的应用(一)——单值二叉树问题、相同的树问题、对称二叉树问题、另一棵树的子树问题详解

 


🔥个人主页:艾莉丝努力练剑

❄专栏传送门:《C语言》、《数据结构与算法》、C语言刷题12天IO强训、LeetCode代码强化刷题

🍉学习方向:C/C++方向

⭐️人生格言:为天地立心,为生民立命,为往圣继绝学,为万世开太平


 


前言:牛客网和LeetCode的刷题都不可或缺,我们都要做一做,无论是参加竞赛还是笔试面试,至少能提升你的代码能力!洛谷的题目也可以去做一做。力扣的题目对提升代码能力很有帮助,需要有一点基础,几乎都是接口型的题目,关于接口型和IO型的区别我们在本专栏的第一篇【LeetCode】力扣题——轮转数组、消失的数字、数组串联中就介绍过了,这里不再赘述,我们进入今天的力扣题目介绍——


目录

正文

一、单值二叉树问题

(一)思路

(二)解题过程

(三)完整代码

二、相同的树问题

(一)思路

(二)解题过程

(三)完整代码

三、对称二叉树问题

(一)思路

(二)解题过程

(三)完整代码

四、另一棵树的子树问题

(一)思路

(二)解题过程

(三)完整代码

结尾


正文

一、单值二叉树问题

965. 单值二叉树

博主题解链接:若根节点root非空,让root跟左右孩子节点的值进行比较

题目描述:

题目示例和提示——  

(一)思路

我们的思路是:根左右,若根节点root非空,让root跟左右孩子节点的值进行比较

(二)解题过程

(三)完整代码

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     struct TreeNode *left;*     struct TreeNode *right;* };*/
bool isUnivalTree(struct TreeNode* root) {if(root == NULL){return true;}//根节点root非空,root跟左右孩子节点的值进行比较if(root->left && root->left->val != root->val){return false;}if(root->right && root->right->val != root->val){return false;}return isUnivalTree(root->left) && isUnivalTree(root->right);
}

复杂度:时间复杂度:O(logn),空间复杂度:O(n)

二、相同的树问题

100. 相同的树

博主题解链接:分都为空、其中一个为空、都不为空三种情况讨论,解决相同的树问题

题目描述:

题目示例和提示——  

(一)思路

我们的思路是:可以分都为空、其中一个为空、都不为空三种情况讨论

(二)解题过程

(三)完整代码

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     struct TreeNode *left;*     struct TreeNode *right;* };*/
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);
}

复杂度:时间复杂度:O(logn),空间复杂度:O(n)

三、对称二叉树问题

101. 对称二叉树

博主题解链接:利用相同的树用过的方法:分三种情况讨论,结合对称性解决问题

题目描述:

(一)思路

我们的思路是:利用相同的树用过的方法:分三种情况讨论,并且结合对称性

(二)解题过程

(三)完整代码

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     struct TreeNode *left;*     struct TreeNode *right;* };*/
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->right) && isSameTree(p->right,q->left);
}
bool isSymmetric(struct TreeNode* root) 
{return isSameTree(root->left,root->right);
}

复杂度:时间复杂度:O(logn),空间复杂度:O(n)

四、另一棵树的子树问题

572. 另一棵树的子树

博主题解链接:分三种情况讨论解决另一棵树的子树

题目描述:

题目示例和提示——  

(一)思路

我们的思路是:分为空、其中一个为空、都不为空三种情况讨论

(二)解题过程

(三)完整代码

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     struct TreeNode *left;*     struct TreeNode *right;* };*/
typedef struct TreeNode TreeNode;
bool isSameTree(TreeNode* p,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(isSameTree(root,subRoot)){return true;}return isSubtree(root->left,subRoot) || isSubtree(root->right,subRoot);
}

复杂度:时间复杂度:O(logn),空间复杂度:O(n)


结尾

往期回顾:

【LeetCode&数据结构】栈和队列的应用——设计循环队列问题详解

由于本专栏的篇数越来越多,为了避免文章链接挂太多影响观感,博主之后的每一篇力扣刷题详解都只会附上前一篇的链接,最后一次完整链接是在之后会发布的【栈的应用——有效的括号问题详解】和【单链表的应用——环形链表问题详解】的文章结尾,本意是为了方便大家找到相应的详细的题解,现在文章多了,铸币博主没办法一一罗列,而且还会有“凑字数”的嫌疑,力扣刷题专栏的链接每次都会放在文章开头的位置,大家可自行前往!

       感谢大家的理解与支持!

【LeetCode&数据结构】栈的应用——有效的括号问题详解

【LeetCode&数据结构】单链表的应用——环形链表问题详解

结语:本篇文章到这里就结束了,本文讲述的四道代码题并不适合C语言初学者,需要有一定的C语言基础,要学完数据结构与算法的算法复杂度和二叉树的知识,才能写出复杂度较优的代码来。大家一定要自己动手敲一敲,不敲的话不仅容易忘记,也不方便将来复习。

http://www.dtcms.com/a/295214.html

相关文章:

  • Faiss中L2欧式距离与余弦相似度:究竟该如何选择?
  • Web前端入门:JavaScript 哪些地方需要 try...catch 异常捕获
  • 【图论】倍增与lca
  • Avalonia 基于MVVM的时间统计/系统时间显示 示例
  • EPSON爱普生全系列废墨垫已满清零工具分享附教程下载
  • EasyExcel 模板导出数据 + 自定义策略(合并单元格)
  • 基于深度学习的胸部 X 光图像肺炎分类系统(三)
  • Turbo Intruder 并发插件无法试用--更换新版Burpsuit解决(简单解决安装、破解问题)
  • 开源Qwen凌晨暴击闭源Claude!刷新AI编程SOTA,支持1M上下文
  • 跨境支付入门~国际支付结算(结算篇)
  • AtCoder Beginner Contest 415(ABCDE)
  • `neutron router-gateway-set` 操作失败的可能原因及解决方案
  • 深度分析Java多线程机制
  • 【智能协同云图库】智能协同云图库第六弹:空间模块开发
  • 微服务的编程测评系统6-管理员登录前端-前端路由优化
  • 【开源】WPF的数据可视化大屏解决方案——WpfMap
  • 洛谷 P11378 [GESP202412 七级] 燃烧-普及/提高-
  • fdbus4.2 timer的使用
  • AI时代,我的编程工作搭子
  • ospf单区域实验
  • Windows批量工具,直接起飞!
  • 外部存档(External Archive)机制
  • MNIST 手写数字识别模型分析
  • 无人机电池通讯接口应用:CANFD工业级芯片的选型与技术要点
  • 跨境支付入门~国际支付结算(稳定币)
  • 事务的特性 - ACID
  • 游戏装备被盗,运营商赔不赔
  • 算法牢笼与思想飞地:在人工智能时代守卫灵魂的疆域
  • gig-gitignore工具实战开发(二):设计多源模板系统
  • Python--Tkinter--标准 GUI 工具包