代码入口——isSubStructure方法
public boolean isSubStructure(TreeNode A, TreeNode B) {
if (A == null || B == null) return false;
//后面两个递归是为了寻找root节点相同的节点,如果不同的话会在judge返回false
return judge(A, B) || isSubStructure(A.left, B) || isSubStructure(A.right, B);
}
private boolean judge(TreeNode A, TreeNode B) {
//如果因为B==null导致A|B=null,说明B已经到头了
//如果AB都不是null->如果root节点val相同->递归判断他们的左右节点的val是否相同,
//只要出现一次不同,递归将会结束返回false,否则整到最后两个都是null了,那么就是相同的树结构
return (A == null || B == null) ? (B == null) : (A.val == B.val) && judge(A.left, B.left) && judge(A.right, B.right);
}
- judge方法目的在于判断root相同的话递归判断每个节点是否相同,再将结果依次返回。
- isSubStructure方法调用judge方法,如果root节点不同的话紧接着将left和right进行judge判断。