# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def isSymmetric(self, root: Optional[TreeNode]) -> bool:
if not root:
return True
# #递归
# return self.compare(root.left, root.right)
# def compare(self, left, right):
# if not left and not right:
# return True
# if not left and right:
# return False
# if left and not right:
# return False
# if left.val != right.val:
# return False
# compare1 = self.compare(left.left, right.right)
# compare2 = self.compare(left.right, right.left)
# return compare1 and compare2
# #迭代
# st = []
# st.append(root.left)
# st.append(root.right)
# while st:
# rightnode = st.pop()
# leftnode = st.pop()
# if not leftnode and not rightnode:
# continue
# if not leftnode or not rightnode or leftnode.val != rightnode.val:
# return False
# st.append(leftnode.left)
# st.append(rightnode.right)
# st.append(leftnode.right)
# st.append(rightnode.left)
# return True
# 层序
queue = collections.deque([root])
while queue:
level_size = len(queue)
level_vals = []
for i in range(level_size):
node = queue.popleft()
if node:
level_vals.append(node.val)
# if node.left:
queue.append(node.left)
# if node.right:
queue.append(node.right)
else:
level_vals.append(None)
print(level_vals)
if level_vals != level_vals[::-1]:
return False
return True