返回
对称二叉树:判断一棵二叉树是否轴对称的 Python 实现
前端
2023-09-27 13:01:14
前言
在计算机科学中,二叉树 是一种常见的数据结构,它由一组结点组成,每个结点最多有两个子结点(称为左子结点和右子结点)。对称二叉树 是指一棵二叉树在关于某条竖直轴翻转后仍然与自身相同。
判断一棵二叉树是否对称是一个基本算法问题,在很多场景中都有应用,例如图形渲染、图像处理和文件系统组织。本文将介绍一种 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 算法实现,并分析了算法的复杂度。该算法易于理解和实现,可以在各种场景中应用。