class Solution {
public static boolean isSubStructure(TreeNode A, TreeNode B) {
if (A == null || B == null)
return false;
//先从根节点判断B是不是A的子结构,如果不是在分别从左右两个子树判断,
//B不光有可能是A的子结构,也有可能是A左子树的子结构或者右子树的子结构,只要有一个成立就返回true
return isSub(A, B) || isSubStructure(A.left, B) || isSubStructure(A.right, B);
}
static boolean isSub(TreeNode A, TreeNode B) {
//这里如果B为空,说明B已经访问完了,true
if (B == null)
return true;
//如果B还有,但A遍历完了,或者这两个节点值不同, B 剩下的就无法匹配,false
if (A == null || A.val != B.val)
return false;
//当前节点比较完之后还要继续判断左右子节点
return isSub(A.left, B.left) && isSub(A.right, B.right);
}
}