剑指 Offer 26. 树的子结构

146 阅读1分钟

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

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


var isSubStructure = function (A, B) {
  if (!B) return false;
  const same = (a, b) => {
    if (!b) return true;

    if (!a) return false;

    if (a.val === b.val) {
      // 两个节点值相同的话,则比较左右子树是否相同
      if (same(a.left, b.left) && same(a.right, b.right)) {
        return true;
      }
    }

    // 其他情况下,则说明 a 节点肯定不符合,则尝试判断 a 节点的左右子树是否符合(需要从B节点重新开始)
    return same(a.left, B) || same(a.right, B);
  };

  return same(A, B);
};
var isSubStructure = function (A, B) {
  if (!B) return false;
  const same = (a, b) => {
    if (!b) return true;

    if (!a) return false;

    if (a.val === b.val) {
      // 两个节点值相同的话,则比较左右子树是否相同
      if (same(a.left, b.left) && same(a.right, b.right)) {
        return true;
      }
    }

    // 其他情况下,则说明 a 节点肯定不符合,则尝试判断 a 节点的左右子树是否符合(需要从B节点重新开始)
    return same(a.left, B) || same(a.right, B);
  };

  return same(A, B);
};