参考
https://leetcode-cn.com/problems/symmetric-tree/solution/dong-hua-yan-shi-101-dui-cheng-er-cha-shu-by-user7/
https://leetcode-cn.com/problems/symmetric-tree/solution/hua-jie-suan-fa-101-dui-cheng-er-cha-shu-by-guanpe/
题目描述
给定一个二叉树,检查它是否是镜像对称的。
解法一:递归
镜像对称的理解,可如图所示
其次,递归结束的条件应该有三个:
- 两个节点都为空节点
- 一个为空节点,一个不为空节点
- 两个节点的值不相等
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def isSymmetric(self, root):
if not root:
return True
def isSymmetric_left_right(left, right):
if not (left or right):
return True
if not (left and right):
return False
if left.val != right.val:
return False
return isSymmetric_left_right(left.left, right.right) and isSymmetric_left_right(left.right, right.left)
return isSymmetric_left_right(root.left, root.right)
解法二:借助队列,也就是遍历时我们采取层次遍历的方法,一层一层的对比是否呈镜面对称,如图所示。
class Solution:
def isSymmetric(self, root):
if not root:
return True
queue = [root.left, root.right]
while queue:
left = queue.pop(0)
right = queue.pop(0)
if not (left or right):
continue
if not (left and right):
return False
if left.val != right.val:
return False
queue.append(left.left)
queue.append(right.right)
queue.append(left.right)
queue.append(right.left)
return True