算法笔记——树B是否是树A的子结构

144 阅读1分钟

代码入口——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判断。