leetcode-master
leetcode-master copied to clipboard
101. 对称二叉树
其实正常的用队列解法也可以,将一层的节点(包括空节点)收集好后,比如在layer: List中。 再判断 list 是不是对称的。依次遍历每一层。 直观上来说,卡哥 的队列解法,是一个节点找一个节点的镜像。而上述的解法是收集好一层的节点(包括空节点)后,判断该层的节点是不是对称的。上述解法的入队逻辑和原先的二叉树层序遍历的逻辑基本一致。
class Solution:
def isSymmetric(self, root: Optional[TreeNode]) -> bool:
from collections import deque
dq = deque()
res = []
if root: dq.append(root)
while(dq):
layer = []
for i in range(len(dq)):
out = dq.popleft()
if out:
layer.append(out.val)
dq.append(out.left)
dq.append(out.right)
else: # 空节点也入队
layer.append(out)
_len = len(layer)
for i in range(_len//2): # 判断该层节点是否对称
if layer[i] != layer[_len-1-i]: return False
return True