【LeetCode刷题(数据结构)】:另一颗树的子树

给你两棵二叉树 root 和 subRoot 检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树。如果存在,返回 true ;否则,返回 false

二叉树 tree 的一棵子树包括 tree 的某个节点和这个节点的所有后代节点。tree 也可以看做它自身的一棵子树

输入:root = [3,4,5,1,2], subRoot = [4,1,2]

输出:true

输入:root = [3,4,5,1,2,null,null,null,null,0], subRoot = [4,1,2]

输出:false

cpp 复制代码
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */

bool compare (struct TreeNode* p1,struct TreeNode* p2)
{
    if(!p1&&!p2) return true;
    if(!p1||!p2) return false;
    if(p1->val!=p2->val) return false;
    return compare(p1->left,p2->left)&&compare(p1->right,p2->right);
}
bool isSubtree(struct TreeNode* s, struct TreeNode* t){
    if(!s) return false;
    return compare(s,t)||isSubtree(s->left,t)||isSubtree(s->right,t);
}

首先:compare函数是比较两棵树是否相等的函数,因为如果一棵树是另一棵树的子树,那么必定存在这棵树和另一棵树的子树相等。而compare函数利用了遍历树的常规思路------递归

首先比较根节点,若根节点同时为空,则两树相等。

若其中一个为空,另一个非空,则两树不等。

若节点上的数值不等,则两树不等。

剩下的就是,节点上的数值相等,进而要向下比较它们的子树是否相等,使用递归,分别比较左右子树是否相等,注意:一定要都相等才可以

接下来,isSubtree函数也是利用了递归的思想写出来的,

如果递归到最后,s都已经为空了,那么再无相等可言,return false;

否则的话,按照根左右的方法来进行比较,由递归可知,只要存在完全相等的部分,函数的返回值就是真的

相关推荐
HackTorjan8 分钟前
深度解析雪花算法及其高性能优化策略
人工智能·深度学习·算法·性能优化·dreamweaver
北顾笙98014 分钟前
day35-数据结构力扣
数据结构·算法·leetcode
cpp_250138 分钟前
P2249 【深基13.例1】查找
数据结构·c++·算法·题解·二分·洛谷
烤麻辣烫40 分钟前
算法--二分搜索
java·开发语言·学习·算法·intellij-idea
山甫aa1 小时前
二叉树算法-----从零开始的算法
数据结构·算法
睡觉就不困鸭2 小时前
第十七天 翻转字符串里的单词
数据结构·算法·哈希算法·散列表
ulias2122 小时前
leetcode热题 - 4
算法·leetcode·职场和发展
学术阿凡提2 小时前
Spring Boot 优雅实现异步调用:从入门到自定义线程池与异常处理
java·数据库·算法
圣保罗的大教堂2 小时前
leetcode 1559. 二维网格图中探测环 中等
leetcode
MicroTech20252 小时前
微算法科技(NASDAQ :MLGO)量子化边缘检测技术:重塑图像处理的新范式
图像处理·科技·算法