题目
检验 s 中是否包含和 t 具有相同结构和节点值的子树。
s 的一个子树包括 s 的一个节点和这个节点的所有子孙。
思路
如果包含分为3种情况
- s的左子树包含t
- s的右子树包含t
- s == t
class Solution {
public boolean isSubtree(TreeNode s, TreeNode t) {
if(s == null && t == null){
return true;
}
if(s == null && t != null){
return false;
}
if(t == null && s != null){
return true;
}
boolean res1 = isSubtree(s.left, t);
boolean res2 = isSubtree(s.right, t);
boolean res3 = isSameTree(s, t);
return res1||res2||res3;
}
//递归判断一棵树是否相同
public boolean isSameTree(TreeNode s, TreeNode t){
if(s==null && t==null) return true;
if(s!=null && t!=null){
if(s.val!=t.val) return false;
return isSameTree(s.left,t.left) && isSameTree(s.right,t.right);
}
return false;
}
}