class Solution {
public boolean isSubStructure(TreeNode A, TreeNode B) {
//截止条件
if(A == null || B == null) return false;
if(isEqual(A, B)) return true;
return isSubStructure(A.left, B) || isSubStructure(A.right, B);
}
//定义辅助函数,实现判断两棵树是否相等
public boolean isEqual(TreeNode A, TreeNode B){
//截止条件
if(B == null) return true;
if(A == null || A.val != B.val) return false;
return isEqual(A.left, B.left) && isEqual(A.right, B.right);
}
}
此题与之前的判断是否是另外一棵树的子树要加以判断
如下的一题:是要求subRoot要具有是子树,即只能处于节点位置,不能具有额外的节点。
而本题要求的只要具有相同的子结构即可。
要区分子树和子结构的关系
class Solution {
public boolean isSubtree(TreeNode root, TreeNode subRoot) {
if(root == null || subRoot == null) return false;
if(helper(root, subRoot)) return true;
return isSubtree(root.left, subRoot) || isSubtree(root.right, subRoot);
}
public boolean helper(TreeNode root, TreeNode subRoot){
if(subRoot == null) return true;
if(root == null || root.val != subRoot.val) return false;
return helper(root.left, subRoot.left) && helper(root.right, subRoot.right);
}
}