返回

对称二叉树:判断一棵二叉树是否轴对称的 Python 实现

前端

前言

在计算机科学中,二叉树 是一种常见的数据结构,它由一组结点组成,每个结点最多有两个子结点(称为左子结点和右子结点)。对称二叉树 是指一棵二叉树在关于某条竖直轴翻转后仍然与自身相同。

判断一棵二叉树是否对称是一个基本算法问题,在很多场景中都有应用,例如图形渲染、图像处理和文件系统组织。本文将介绍一种 Python 算法来解决此问题,并提供详细的解释和示例代码。

算法实现

我们的 Python 算法基于递归的思想。我们从二叉树的根结点开始,比较其左子结点和右子结点的对称性。如果左子结点和右子结点都对称,则整棵二叉树也是对称的。

以下是算法的 Python 实现:

def is_symmetric(root):
  """
  检查一棵二叉树是否对称。

  参数:
    root: 二叉树的根结点。

  返回:
    如果二叉树对称,返回 True;否则,返回 False。
  """

  if not root:
    return True

  return is_mirror(root.left, root.right)


def is_mirror(left, right):
  """
  检查两棵二叉树是否是镜像对称的。

  参数:
    left: 左子树的根结点。
    right: 右子树的根结点。

  返回:
    如果两棵二叉树是镜像对称的,返回 True;否则,返回 False。
  """

  if not left and not right:
    return True

  if not left or not right:
    return False

  return left.val == right.val and is_mirror(left.left, right.right) and is_mirror(left.right, right.left)

算法分析

该算法的时间复杂度为 O(n),其中 n 是二叉树中结点的数量。算法需要遍历整棵二叉树,并对每个结点进行比较。

算法的空间复杂度为 O(h),其中 h 是二叉树的高度。递归调用栈的最大深度不会超过二叉树的高度。

示例

以下是一个示例输入:

      1
    /   \
   2     2
  / \   / \
 3   4 4   3

输出:

True

因为这棵二叉树是关于竖直轴对称的。

结论

本文介绍了如何判断一棵二叉树是否对称。我们提供了基于递归的 Python 算法实现,并分析了算法的复杂度。该算法易于理解和实现,可以在各种场景中应用。