# class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None # # 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 # # # @param pRoot TreeNode类 # @return bool布尔型 # class Solution: def isSymmetrical(self , pRoot: TreeNode) -> bool: # write code here # 如果为空直接返回 if not pRoot: return True node = pRoot ls = [node] k = 1 # 用于判断是否为根节点 while ls: next_l = [] if len(ls)==1 and k==1: # 根节点处理 k=0 # 根节点只处理一次 if node.left and node.right and node.left.val == node.right.val: next_l.append(node.left) next_l.append(node.right) elif not node.left and not node.right: # 无子节点返回 return True else: # 左右节点的不能同时匹配 return False elif len(ls) % 2 != 0 and k==0: # 每一次的节点数必须为双数,否则不对称,返回 return False else: for i in range(len(ls)//2): node1 = ls[i] node2 = ls[len(ls)-i-1] if node1.left and node2.right and node1.left.val == node2.right.val: pass elif not node1.left and not node2.right: pass else: return False if node1.right and node2.left and node1.right.val == node2.left.val: pass elif not node1.right and not node2.left: pass else: return False for i in range(len(ls)): node = ls.pop(0) if node.left: next_l.append(node.left) if node.right: next_l.append(node.right) ls = next_l return True