📜  检查对称二叉树(迭代方法)(1)

📅  最后修改于: 2023-12-03 14:55:46.042000             🧑  作者: Mango

检查对称二叉树(迭代方法)

对称二叉树是指其左子树和右子树镜像对称的二叉树。本文介绍使用迭代方法来检查给定二叉树是否是对称二叉树。

思路

对称二叉树的定义要求左右子树镜像对称,即左子树的左子树与右子树的右子树对称,左子树的右子树与右子树的左子树对称。因此,我们可以使用迭代的方式来检查这个条件是否成立。

首先,我们使用一个辅助栈,将根结点的左右孩子按照相反的顺序放入栈中。然后,每次从栈中取出两个结点进行比较,若两个结点的值不相等,则说明该树不是对称二叉树;若两个结点的值相等,则将这两个结点的左右孩子按照相反的顺序放入栈中。

迭代终止的条件是栈为空,或者检查过程中发现不满足对称的条件。若整个过程中没有发现不满足对称的条件,则说明给定的二叉树是对称二叉树。

下面是使用迭代方法检查对称二叉树的代码片段:

def isSymmetric(root):
    if root is None:
        return True
    
    stack = [(root.left, root.right)]
    while stack:
        left, right = stack.pop()
        if left is None and right is None:
            continue
        if left is None or right is None or left.val != right.val:
            return False
        stack.append((left.left, right.right))
        stack.append((left.right, right.left))
    
    return True
复杂度分析

该方法使用了一个辅助栈,其最大的规模取决于二叉树的高度。因此,时间复杂度为 O(h),其中 h 是二叉树的高度。空间复杂度为 O(h),即辅助栈的最大规模。

总结

本文介绍了如何使用迭代方法来检查给定二叉树是否是对称二叉树。该方法通过辅助栈来存储需要比较的结点,然后按照一定的规则进行比较。若整个过程中没有发现不满足对称的条件,则说明给定的二叉树是对称二叉树。该方法的时间复杂度为 O(h),其中 h 是二叉树的高度,空间复杂度为 O(h)。