【路飞】树的子结构

358 阅读1分钟

题目:剑指 Offer 26. 树的子结构

image.png

分析

  1. 根据题意空树不是任意一个树的子结构,可以知道当A或B为空时,返回false;
  2. 递归的在A树中找B树是不是子结构、在A树的左子树中找B树是不是子结构、在A树的右子树中找B树是不是子结构

怎么判断是不是子结构?

  1. 如果b树都找完了,都没有发现b树中的任何值与a树不相等,则确定是子结构
  2. 如果b树非空而a树已空,则肯定不是子结构
  3. 比较当前节点值时,不相等则肯定不是子结构
  4. 分别在左右子树中递归去寻找
function isSubStructure(A, B) {
  if (A == null || B == null) return false;
  return dfs(A, B) || isSubStructure(A.left, B) || isSubStructure(A.right, B);
}

function dfs(A, B) {
  // B树找完了,没有发现不相等的,返回true;
  if (B == null) {
    return true;
  }
  if (A == null) {
    return false;
  }
  return A.val == B.val && dfs(A.left, B.left) && dfs(A.right, B.right);
}