Skip to content

力扣链接:101.对称二叉树

难度:⭐

✏️ 方法一:

解题关键词:二叉树递归

解题思路:使用递归判断外侧和内侧元素是否相等。

typescript
function isSymmetric(root: TreeNode | null): boolean {
  // 对比左右节点
  const compare = (left: TreeNode | null, right: TreeNode | null) => {
    // 如果都是 null,那么相等
    if (left === null && right === null) return true;
    // 有一个为 null,那么不相等
    if (left === null || right === null) return false;
    // 值不相等
    if (left.val !== right.val) return false;

    // 比较外侧,即左子树的左边和右子树的右边
    const outside = compare(left.left, right.right);
    // 比较内侧,即左子树的右边和右子树的左边
    const inside = compare(left.right, right.left);

    // 左右子树都相等,才可以
    return outside && inside;
  };

  return compare(root.left, root.right);
}

✏️ 方法二:

解题关键词:二叉树迭代法

解题思路:使用递归判断外侧和内侧元素是否相等。

typescript
function isSymmetric(root: TreeNode | null): boolean {
  // 队列
  const queue: TreeNode[] = [root, root];

  while (queue.length) {
    // 代表左边的子树
    const left = queue.shift();
    // 代表右边的子树
    const right = queue.shift();

    // 如果都是 null,那么继续比较
    if (left === null && right === null) continue;
    // 如果有一个为 null,另一个不为 null
    // 值不相等
    if (left === null || right === null || left.val !== right.val) return false;

    // 对比外侧
    queue.push(left.left, right.right);
    // 对比内侧
    queue.push(left.right, right.left);
  }

  return true;
}