Update 0101.对称二叉树.md

This commit is contained in:
jianghongcheng
2023-05-03 20:40:43 -05:00
committed by GitHub
parent 54bcab13e3
commit 918d0ec0fa

View File

@ -442,25 +442,31 @@ class Solution:
层次遍历
```python
class Solution:
def isSymmetric(self, root: Optional[TreeNode]) -> bool:
def isSymmetric(self, root: TreeNode) -> bool:
if not root:
return True
que = [root]
while que:
this_level_length = len(que)
for i in range(this_level_length // 2):
# 要么其中一个是None但另外一个不是
if (not que[i] and que[this_level_length - 1 - i]) or (que[i] and not que[this_level_length - 1 - i]):
queue = collections.deque([root.left, root.right])
while queue:
level_size = len(queue)
if level_size % 2 != 0:
return False
# 要么两个都不是None
if que[i] and que[i].val != que[this_level_length - 1 - i].val:
level_vals = []
for i in range(level_size):
node = queue.popleft()
if node:
level_vals.append(node.val)
queue.append(node.left)
queue.append(node.right)
else:
level_vals.append(None)
if level_vals != level_vals[::-1]:
return False
for i in range(this_level_length):
if not que[i]: continue
que.append(que[i].left)
que.append(que[i].right)
que = que[this_level_length:]
return True
```