返回

二叉树对称性检查:揭开镜像世界的神秘面纱

人工智能

二叉树对称性概述

在二叉树中,对称性是指树的左子树和右子树在结构和值上完全相同。换句话说,如果将一棵对称二叉树沿其主干线垂直折叠,那么折叠后的两部分应该完全重合。

递归算法:揭秘二叉树对称性的奥秘

为了检查二叉树是否对称,我们可以采用递归算法。该算法从树的根节点开始,同时检查左右子树是否对称。如果左右子树都对称,那么整棵树也是对称的。否则,整棵树就不是对称的。

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

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

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

    if root is None:
        return True

    # 检查左右子树是否对称
    left_symmetric = is_symmetric(root.left)
    right_symmetric = is_symmetric(root.right)

    # 检查左右子树的值是否相同
    left_values = []
    right_values = []
    get_values(root.left, left_values)
    get_values(root.right, right_values)

    return left_symmetric and right_symmetric and left_values == right_values

def get_values(node, values):
    """
    获取二叉树中所有节点的值。

    参数:
        node: 二叉树的根节点。
        values: 存储节点值的列表。

    返回:
        无。
    """

    if node is None:
        return

    # 将节点的值添加到列表中
    values.append(node.val)

    # 递归获取左右子树的节点值
    get_values(node.left, values)
    get_values(node.right, values)

实例演示:探索二叉树对称性的各种情况

为了更好地理解二叉树对称性,我们来看几个实例:

  • 对称二叉树 :如果一棵二叉树的左子树和右子树在结构和值上完全相同,那么这棵二叉树就是对称的。例如,以下二叉树是对称的:

        1
       / \
      2   2
     / \ / \
    3  4 4  3
    
  • 不对称二叉树 :如果一棵二叉树的左子树和右子树在结构或值上不同,那么这棵二叉树就不是对称的。例如,以下二叉树不是对称的:

        1
       / \
      2   3
     / \
    4   5
    
  • 半对称二叉树 :如果一棵二叉树的左子树和右子树在结构上相同,但在值上不同,那么这棵二叉树是半对称的。例如,以下二叉树是半对称的:

        1
       / \
      2   2
     / \ /
    3  4 3
    

结语

二叉树对称性是二叉树的一个重要性质,在许多算法和数据结构中都有着广泛的应用。通过本文的介绍,您已经对二叉树对称性有了深入的了解。希望这些知识能够帮助您更好地理解和运用二叉树。