力扣:101. 对称二叉树(Python3)

题目:

给你一个二叉树的根节点 root , 检查它是否轴对称。

来源:力扣(LeetCode)
链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

示例:

示例 1:

力扣:101. 对称二叉树(Python3)_第1张图片

输入:root = [1,2,2,3,4,4,3]
输出:true


示例 2:

力扣:101. 对称二叉树(Python3)_第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

你可能感兴趣的:(LeetCode,leetcode,算法,python)