当前位置:网站首页>“子问题的递归处理”——判断两棵树是不是相同的树——以及 另一颗树的子树
“子问题的递归处理”——判断两棵树是不是相同的树——以及 另一颗树的子树
2022-07-26 05:54:00 【学习追求高效率】
“子问题的递归处理”——先看根节点,再看左右子树
判断两棵树是不是相同的树
1. 检查两颗树是否相同
做题逻辑
- 就以根节点 为基础
先判断 两个树的根节点 进行对比- 如果两个根节点 没问题
那么就看 这个根节点的 左右子树 和另一个根节点的左右子树是不是有问题
return false的情况
- 一空一不空 || 两个值不同
return true
- 两个都为空
递归在于 return 递归函数
public boolean isSameTree(TreeNode p, TreeNode q) {
//这里只是判断的 一个为空 一个不为空的情况 。
// 你没有判断 两个都是空 和 两个都不是空的情况
if(p == null && q != null || p != null && q == null) {
return false;
}
if(p == null && q == null) {
return true;
}
if(p.val != q.val) {
return false;
}
//p != null && q != null && p.val == q.val
return isSameTree(p.left,q.left) && isSameTree(p.right,q.right);
}
2. 另一颗树的子树(时间复杂度:O(n*m))
public boolean isSameTree(TreeNode p, TreeNode q) {
//这里只是判断的 一个为空 一个不为空的情况 。
// 你没有判断 两个都是空 和 两个都不是空的情况
if(p == null && q != null || p != null && q == null) {
return false;
}
if(p == null && q == null) {
return true;
}
if(p.val != q.val) {
return false;
}
//p != null && q != null && p.val == q.val
return isSameTree(p.left,q.left) && isSameTree(p.right,q.right);
}
//时间复杂度:O(n*m) 假设root这棵树的节点个数n subRoot节点个数是m
public boolean isSubtree(TreeNode root, TreeNode subRoot) {
if(root == null) return false;
if(isSameTree(root,subRoot)) return true;
if(isSubtree(root.left,subRoot)) return true;
if(isSubtree(root.right,subRoot)) return true;
return false;
}
逻辑:1. 如果树为空 不可能有子树 return flase
if(root == null) return false;
2. 如果 根 与 子树 正好相等 return true
if(isSameTree(root,subRoot)) return true;
3. 如果 根的左 与 子树正好相等 return true
if(isSubtree(root.left,subRoot)) return true;
4. 如果 根的右 与 子树正好相等 return true
if(isSubtree(root.right,subRoot)) return true;
5. if 都没有满足 那么 return false
注意:其实代码在 递归过程中,不仅仅是比较了 根的左和右,(如果没有想要的)还比较的其余的根的左右
原因:代码在递归的过程中,走遍了每个根节点
边栏推荐
- Another open source artifact, worth collecting and learning!
- 三本毕业,三年嵌入式软件的心路历程
- How are masters refined?
- Redis发布订阅
- Kingbasees SQL language reference manual of Jincang database (9. Common DDL clauses)
- Redis persistence AOF
- 二叉排序树(BST) ~
- LNMP architecture
- [论文笔记] 面向网络语音隐写的抗分组丢失联合编码
- Select sort / insert sort / bubble sort
猜你喜欢

ES Cluster in Red status: what about write & delete operations?

Redis持久化-RDB

Redis publish subscription

Solve vagrant's error b:48:in `join ': incompatible character encodings: GBK and UTF-8 (encoding:: Compatib

JDBC streaming query and cursor query

开发项目事半功倍,一款开源的stm32驱动库大集合

为什么LPDDR不能完全代替DDR?

leetcode-Array

Redis official visualization tool, with high appearance value and powerful functions!

柠檬班自动化学习毕竟
随机推荐
leetcode-aboutString
leetcode-Array
Unity Profiler
SSH Remote Management
The idea YML file code does not prompt the solution
柠檬班自动化学习毕竟
How are masters refined?
Efficient, reliable and safe open source solution for serial communication
Using easyexcel to import tables to realize batch insertion of xlsx files ----- MySQL of Linux
金仓数据库 KingbaseES SQL 语言参考手册 (6. 表达式)
Kingbasees SQL language reference manual of Jincang database (8. Functions (XI))
Application of canoe XML in test modules
调试利器!一款轻量级日志库 log.c
Qt编写物联网管理平台47-通用数据库设置
Day110.尚医通:Gateway集成、医院排班管理:科室列表、根据日期统计数据、排班详情
对接微信支付(二)统一下单API
[MySQL must know and know] time function number function string function condition judgment
金仓数据库 KingbaseES SQL 语言参考手册 (8. 函数(十一))
Autumn move - Preparation Plan
Hack the box - Introduction to networking module detailed Chinese tutorial


