面试题26. 树的子结构

题目描述

输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)

B是A的子结构, 即 A中有出现和B相同的结构和节点值。


image

示例:

输入:A = [1,2,3], B = [3,1]
输出:false

输入:A = [3,4,5,1,2], B = [4,1]
输出:true


提示:
0 <= 节点个数 <= 10000

转载来源:力扣(LeetCode)


题目分析

  1. 开始,A、B
  2. 如果A或者B为null,直接返回false
  3. 检查B是否是A的子结构,如果是,返回true
  4. B不是A的子结构,检查B是不是A的左子树的结构,以A.left和B回到1
  5. B既不是A的子结构又不是A的左子树的结构,检查B是不是A的右子树的结构,以A.right和B返回1
  6. 以上都不符合,返回false
  • 检查B是否为A的子结构的算法:
  1. 开始,A、B
  2. 如果A为空或者A、B的val不相等,返回false
  3. 以A.left和B.left回到1,判断A、B左子树是否相等,不等返回false
  4. 以A.right和B.right回到1,判断A、B右子树是否相等 ,不等返回false
  5. 如果以上都满足,返回true
public boolean isSubStructure(TreeNode A, TreeNode B) {
        if(A == null) return false;
        if(B == null) return false;
        if(check(A,B))
            return true;
        if(isSubStructure(A.left,B))
            return true;
        if(isSubStructure(A.right,B))
            return true;
        return false;
    }

    public boolean check(TreeNode a,TreeNode b){
        if(a == null && b == null)
            return true;
        if(a == null) return false;
        if(b == null) return true;
        if(a.val != b.val)
            return false;
        return check(a.left,b.left) && check(a.right,b.right);
    }

你可能感兴趣的:(面试题26. 树的子结构)