题目:
给你一个二叉树的根节点
root
, 检查它是否轴对称。来源:力扣(LeetCode)
链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
示例:
示例 1:
输入:root = [1,2,2,3,4,4,3]
输出:true
示例 2:输入:root = [1,2,2,null,3,null,3]
输出:false
解法:
BFS的过程中记录层数,子节点空用“#”表示,接着把每层的左子树和右子树的逆序比较。
知识点:
1.队:Python中队可以用列表实现,例如:queue = [],入队使用append函数,出队使用pop(0)函数,同时获得队头元素,队尾元素用queue[-1]访问。
2.关于元组赋值:假设元组t每个元素形如(level,cur),在赋值的时候,直接解包,比如a, b = t[0],a得到level,b得到cur。
3.collections.defaultdict(factory_function):factory_function可以是list、set、str等,创建并初始化字典,初始化每个值为factory_function类型,可以避免访问key值不存在时报的KeyError错误。举例:
d = defaultdict(list)
d[key].append(value)
代码:
# 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: queue = [(0, root)] result = [] while queue: level, cur = queue.pop(0) if cur: result.append((level, cur.val)) queue.append((level + 1, cur.left)) queue.append((level + 1, cur.right)) else: result.append((level, '#')) d = defaultdict(list) for level, cur in result[1:]: d[level].append(cur) for v in d.values(): if v[:len(v) // 2] != v[len(v) // 2:][::-1]: return False return True