101.对称二叉树
给定一个二叉树,检查它是否是镜像对称的。
解法1 递归
# 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: TreeNode) -> bool:
if root is None:
return True
return self.recur(root.left, root.right)
def recur(self, a, b):
if a is None and b is not None:
return False
if a is not None and b is None:
return False
if a is None and b is None:
return True
r = a.val == b.val
p = self.recur(a.left, b.right)
q = self.recur(a.right, b.left)
return r and p and q
解法2 迭代
- 队列
# 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: TreeNode) -> bool:
if not root:
return True
# 迭代
return self.itera(root.left, root.right)
def itera(self, a, b):
l = [(a, b)]
while l:
a, b = l.pop(0)
if a and b and a.val == b.val:
l.append((a.left, b.right))
l.append((a.right, b.left))
elif not a and not b:
pass
else:
return False
# elif not a and b: # a is None and b is not None
# return False
# elif a and not b: # a is not None and b is None
# return False
# elif not a and not b: # a is None and b is None
# pass
# else: # a and b and a.val != b.val
# return False
return True