返回

LeetCode HOT 100:对称二叉树 - 拥抱二叉树的对称之美

前端

一、何谓对称二叉树

在计算机科学中,对称二叉树是指一棵二叉树,其中每个节点的左子树和右子树是对称的。换句话说,如果将一棵对称二叉树从中间劈开,那么左右两部分将是镜像对称的。

对称二叉树的一些特点包括:

  • 根节点的左子树和右子树是对称的。
  • 每个节点的左子树和右子树也都是对称的。
  • 对称二叉树的先序遍历和后序遍历结果相同。
  • 对称二叉树的中序遍历结果可能不同。

二、判断对称二叉树的方法

判断一棵二叉树是否对称,有以下几种方法:

1. 递归法

递归法是解决这个问题最简单的方法之一。我们可以将问题分解为若干个子问题,每个子问题都是判断一个较小的子树是否对称。

具体步骤如下:

  • 如果树为空,则返回True。
  • 如果树只有一个节点,则返回True。
  • 如果树的左子树和右子树都为空,则返回True。
  • 如果树的左子树和右子树都不为空,则比较两个子树是否对称。如果对称,则返回True;否则,返回False。

2. 深度优先搜索法

深度优先搜索法也是一种解决这个问题的有效方法。我们可以使用栈或队列来实现深度优先搜索。

具体步骤如下:

  • 将根节点压入栈或队列中。

  • 循环执行以下步骤,直到栈或队列为空:

    • 将栈或队列顶部的节点弹出。
    • 如果该节点的左子树和右子树都为空,则继续执行下一轮循环。
    • 如果该节点的左子树和右子树都不为空,则将两个子树压入栈或队列中。
    • 如果该节点的左子树为空,而右子树不为空,则返回False。
    • 如果该节点的右子树为空,而左子树不为空,则返回False。
  • 如果栈或队列为空,则返回True。

三、LeetCode HOT 100 题目解析

LeetCode HOT 100题目中的对称二叉树题目如下:

给你一个二叉树的根节点root,检查它是否轴对称。

我们可以使用递归法或深度优先搜索法来解决这个问题。

以下是使用递归法解决该题的Python代码:

def is_symmetric(root):
    if root is None:
        return True
    return is_symmetric_helper(root.left, root.right)

def is_symmetric_helper(left, right):
    if left is None and right is None:
        return True
    if left is None or right is None:
        return False
    return left.val == right.val and is_symmetric_helper(left.left, right.right) and is_symmetric_helper(left.right, right.left)

以下是使用深度优先搜索法解决该题的Python代码:

def is_symmetric(root):
    stack = [root.left, root.right]
    while stack:
        left = stack.pop()
        right = stack.pop()
        if left is None and right is None:
            continue
        if left is None or right is None:
            return False
        if left.val != right.val:
            return False
        stack.append(left.left)
        stack.append(right.right)
        stack.append(left.right)
        stack.append(right.left)
    return True

四、总结

对称二叉树是一个经典的计算机科学问题,也是LeetCode HOT 100题目之一。我们可以使用递归法或深度优先搜索法来解决这个问题。希望这篇文章对您理解对称二叉树及其解决方案有所帮助。

如果您还有其他问题,欢迎在评论区留言。