目录
一、题目


二、思路
1.先判断两棵树是不是两颗相同的树
2.如果不是,那么分别判断subRoot是不是root的左子树或者右子树(换句话来说,就是,subRoot和root的左子树或右子树是不是同一颗树)
时间复杂度:O(∣s∣×∣t∣)
空间复杂度:O(max{d1,d2})。假设s的深度为d1,t的深度为d2,任意时刻栈空间的最大使用代价是 O(max{d1,d2})
三、代码实现
class Solution {
private boolean isSameTree(TreeNode p, TreeNode q) {
if(p == null && q == null){
return true;
}
if(p != null && q == null || p == null && q != null){
return false;
}
if(p.val != q.val){
return false;
}
return isSameTree(p.left,q.left) && isSameTree(p.right,q.right);
}
public boolean isSubtree(TreeNode root, TreeNode subRoot) {
if(root == null || subRoot == null){
return false;//如果其中一个为空,则返回false;虽然说isSameTree这个函数里面也判断了,但是此处的判断是为了服务isSubtree的
}
if(isSameTree(root, subRoot)){
return true;
}
if(isSubtree(root.left,subRoot)){
return true;
}
if(isSubtree(root.right,subRoot)){
return true;
}
return false;
}
}
二叉树子树判断与实现
该博客探讨了如何判断一棵树是否是另一棵树的子树的问题,提供了详细的思路和代码实现。首先,通过比较两棵树是否完全相同来判断,然后分别检查子树是否与主树的左右子树匹配。算法的时间复杂度为O(n*m),空间复杂度为O(max(d1,d2)),其中n和m分别为两棵树的节点数,d1和d2为它们的深度。
1291

被折叠的 条评论
为什么被折叠?



