剑指Offer-24树的子结构

70 阅读1分钟
/**
 * 对A先序遍历 B不动
 * @author Lucas
 * @date 2021/02/08 23:31
 * @param A 给定树
 * @param B 子结构
 * @return boolean
 */
public static boolean isSubStructure(TreeNode A, TreeNode B) {
    // 递归出口
    if (A == null || B == null) {
        return false;
    }
    // 递归找到A中以B的根节点为root的子树
    return compare(A, B) || isSubStructure(A.left, B) || isSubStructure(A.right, B);
}

/**
 * A,B比较判断B是否为A的子结构
 * @author Lucas
 * @date 2021/02/08 23:32
 * @param A 给定树
 * @param B 子结构
 * @return boolean
 */
public static boolean compare(TreeNode A, TreeNode B){
    // B为空时 证明已经匹配完成
    if (B == null){
        return true;
    }
    if (A == null || A.val != B.val){
        return false;
    }
    // 递归A B同时向左或向右
    return compare(A.left, B.left) && compare(A.right, B.right);
}