📅  最后修改于: 2023-12-03 14:54:56.120000             🧑  作者: Mango
二叉树是一种非常重要的数据结构,在计算机科学中被广泛应用。在处理树形结构的数据时,二叉树为我们提供了一种很有效的方式。问题 6 将帮助我们更好地理解和操作二叉树。
给定一个二叉树,判断它是否是镜像对称的。即根节点的左子树和右子树对称(结构相同,值相等)。
例如,下面的二叉树是对称的:
1
/ \
2 2
/ \ / \
3 4 4 3
而下面的二叉树不是对称的:
1
/ \
2 2
\ \
3 3
我们可以使用递归或迭代的方式解决这个问题。下面分别介绍这两种解决方案。
我们可以定义一个递归函数 isSymmetricHelper
,该函数用于判断两个节点是否对称。具体步骤如下:
True
。isSymmetricHelper
分别比较左子树和右子树。True
。False
。True
,则说明树是对称的。下面是递归解决方案的示例代码:
class Solution:
def isSymmetric(self, root):
if root is None:
return True
return self.isSymmetricHelper(root.left, root.right)
def isSymmetricHelper(self, left, right):
# 判断两个节点是否对称
if left is None and right is None:
return True
if left is None or right is None or left.val != right.val:
return False
return self.isSymmetricHelper(left.left, right.right) and self.isSymmetricHelper(left.right, right.left)
我们也可以使用迭代的方式解决这个问题。具体步骤如下:
False
。True
。下面是迭代解决方案的示例代码:
from collections import deque
class Solution:
def isSymmetric(self, root):
if root is None:
return True
queue = deque()
queue.append(root.left)
queue.append(root.right)
while queue:
left = queue.popleft()
right = queue.popleft()
if left is None and right is None:
continue
if left is None or right is None or left.val != right.val:
return False
queue.append(left.left)
queue.append(right.right)
queue.append(left.right)
queue.append(right.left)
return True
本文介绍了如何判断一个二叉树是否是镜像对称的,提供了递归和迭代两种解决方案。根据实际情况选择适合的方法来解决问题。希望通过这个问题的讲解,你能更好地理解和操作二叉树的相关算法。