返回
LeetCode HOT 100:对称二叉树 - 拥抱二叉树的对称之美
前端
2023-09-18 18:57:38
一、何谓对称二叉树
在计算机科学中,对称二叉树是指一棵二叉树,其中每个节点的左子树和右子树是对称的。换句话说,如果将一棵对称二叉树从中间劈开,那么左右两部分将是镜像对称的。
对称二叉树的一些特点包括:
- 根节点的左子树和右子树是对称的。
- 每个节点的左子树和右子树也都是对称的。
- 对称二叉树的先序遍历和后序遍历结果相同。
- 对称二叉树的中序遍历结果可能不同。
二、判断对称二叉树的方法
判断一棵二叉树是否对称,有以下几种方法:
1. 递归法
递归法是解决这个问题最简单的方法之一。我们可以将问题分解为若干个子问题,每个子问题都是判断一个较小的子树是否对称。
具体步骤如下:
- 如果树为空,则返回True。
- 如果树只有一个节点,则返回True。
- 如果树的左子树和右子树都为空,则返回True。
- 如果树的左子树和右子树都不为空,则比较两个子树是否对称。如果对称,则返回True;否则,返回False。
2. 深度优先搜索法
深度优先搜索法也是一种解决这个问题的有效方法。我们可以使用栈或队列来实现深度优先搜索。
具体步骤如下:
-
将根节点压入栈或队列中。
-
循环执行以下步骤,直到栈或队列为空:
- 将栈或队列顶部的节点弹出。
- 如果该节点的左子树和右子树都为空,则继续执行下一轮循环。
- 如果该节点的左子树和右子树都不为空,则将两个子树压入栈或队列中。
- 如果该节点的左子树为空,而右子树不为空,则返回False。
- 如果该节点的右子树为空,而左子树不为空,则返回False。
-
如果栈或队列为空,则返回True。
三、LeetCode HOT 100 题目解析
LeetCode HOT 100题目中的对称二叉树题目如下:
给你一个二叉树的根节点root,检查它是否轴对称。
我们可以使用递归法或深度优先搜索法来解决这个问题。
以下是使用递归法解决该题的Python代码:
def is_symmetric(root):
if root is None:
return True
return is_symmetric_helper(root.left, root.right)
def is_symmetric_helper(left, right):
if left is None and right is None:
return True
if left is None or right is None:
return False
return left.val == right.val and is_symmetric_helper(left.left, right.right) and is_symmetric_helper(left.right, right.left)
以下是使用深度优先搜索法解决该题的Python代码:
def is_symmetric(root):
stack = [root.left, root.right]
while stack:
left = stack.pop()
right = stack.pop()
if left is None and right is None:
continue
if left is None or right is None:
return False
if left.val != right.val:
return False
stack.append(left.left)
stack.append(right.right)
stack.append(left.right)
stack.append(right.left)
return True
四、总结
对称二叉树是一个经典的计算机科学问题,也是LeetCode HOT 100题目之一。我们可以使用递归法或深度优先搜索法来解决这个问题。希望这篇文章对您理解对称二叉树及其解决方案有所帮助。
如果您还有其他问题,欢迎在评论区留言。