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

【LeetCode刷题指南】--对称二叉树,另一颗树的子树

 🔥个人主页:@草莓熊Lotso

🎬作者简介:C++研发方向学习者

📖个人专栏: 《C语言》 《数据结构与算法》《C语言刷题集》《Leetcode刷题指南》

⭐️人生格言:生活是默默的坚持,毅力是永久的享受。 

前言:在之前的C语言刷题集中我们刷了很多IO类型的基础编程题,但是随着数据结构往后的学习以及企业面试的要求,我们还需要对接口型的题目进行练习,博主在这里准备了新的《LeetCode刷题指南》专栏给大家分享一些我自己在力扣上面写过的题目,提供一些我的解题思路。个人实力有限,欢迎大家补充和指正。


目录

一.对称二叉树

解题过程:

代码实现: 

二.另一颗树的子树

解题过程:

代码实现: 


一.对称二叉树

题目链接:101. 对称二叉树 - 力扣(LeetCode)

 题目描述:

题目示例: 

思路: 递归

解题过程:

1.判断当前树的左右子树是不是相同的树

2.调用相同的树的代码,具体操作在之前的题目中讲过

3.但是要注意相同的树判断代码里这里和之前的不太一样

具体过程如图所示: 

复杂度: 

  • 时间复杂度: O(n)
  • 空间复杂度: O(n)

代码实现: 

/*** 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->right)&&isSameTree(p->right,q->left);
}bool isSymmetric(struct TreeNode* root) {return isSameTree(root->left,root->right);
}

二.另一颗树的子树

题目链接:572. 另一棵树的子树 - 力扣(LeetCode)

题目描述: 

题目示例: 

思路: 递归

解题过程:

1.在isSubtree函数里,如果root为空直接返回false
2.如果root不为空,先拿当前root和Subtree比较,看是否是相同的树(这里调用之前写过的相同的树的函数,没有需要修改的地方)
3.如果不为空也不是相同的树,则继续传左孩子或者右孩子递归,有任意一个符合isSubtree就可以
具有操作如图所示:

复杂度: 

  • 时间复杂度: O(n)
  • 空间复杂度: O(n)

代码实现: 

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     struct TreeNode *left;*     struct TreeNode *right;* };*/bool isSameTree(struct TreeNode* p, struct TreeNode* q) {//p和q都为空if(p==NULL && q==NULL){return true;}//p和q只有一个为空,前面提前判断过全为空处理了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) {//如果root为空则返回falseif(root==NULL){return false;}//如果是相等的树就返回trueif(isSameTree(root,subRoot)){return true;}//如果这次不相等,就传左右孩子节点。左右子树任一有一个和subRoot相同就可以return isSubtree(root->left,subRoot)||isSubtree(root->right,subRoot);
}

往期回顾:

【LeetCode刷题指南】--有效的括号

【LeetCode刷题指南】--队列实现栈,栈实现队列

【LeetCode刷题指南】--单值二叉树,相同的树

【LeetCode刷题指南】--二叉树的前序遍历,二叉树的中序遍历

结语:本篇文章就到此结束了,《LetetCode刷题指南》中的题目比起之间的C语言刷题集中的题目,肯定会更加复杂一些。而且题目形式也不一样,大家需要注意一下。如果文章对你有帮助的话,欢迎评论,点赞,收藏加关注,感谢大家的支持。

http://www.xdnf.cn/news/1239445.html

相关文章:

  • 【量化交易】日内交易有效特征因子
  • Socket编程——TCP协议
  • 智慧社区(六)——社区居民人脸识别功能实现详解:从腾讯 API 集成到模拟验证
  • CMake 命令行参数完全指南(2)
  • C++入门自学Day5-- C/C++内存管理(续)
  • 控制建模matlab练习08:根轨迹
  • 【图像处理基石】如何使用deepseek进行图像质量的分析?
  • pycharm上如何添加conda环境
  • 当Windows远程桌面出现“身份验证错误。要求的函数不受支持”的问题
  • [硬件电路-150]:数字电路 - 数字电路与模拟电路的异同
  • Ollama模型库模型下载慢完美解决(全平台)
  • 算法讲解--最大连续1的个数
  • RSA 解密逻辑
  • 【从零开始学习Redis】初识Redis
  • 第13章 文件输入/输出
  • 网关与路由器的区别
  • 【MySQL】MySQL中锁有哪些?
  • 常见的框架漏洞(Thinkphp,spring,Shiro)
  • 2025年测绘程序设计比赛--基于统计滤波的点云去噪(已获国特)
  • 波士顿房价预测工具 - XGBoost实现
  • openwrt 23.05编译intel igb5.19.4驱动
  • 在Ansys Mechanical中对磨损进行建模
  • nestjs @Param 从入门到精通
  • Python中的sys.path与PYTHONPATH全解析:模块导入路径的底层机制与最佳实践
  • WebMvc自动配置流程讲解
  • 研报复现|史蒂夫·路佛价值选股法则
  • 控制建模matlab练习07:比例积分控制-③PI控制器的应用
  • Java ++i 与 i++ 底层原理
  • 学习游戏制作记录(实现克隆攻击的克隆复制和水晶代替克隆)8.3
  • LCL滤波器及其电容电流前馈有源阻尼设计软件【LCLAD_designer】