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


    题目:

    给你一个二叉树的根节点 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)

    代码:

    1. # Definition for a binary tree node.
    2. # class TreeNode:
    3. # def __init__(self, val=0, left=None, right=None):
    4. # self.val = val
    5. # self.left = left
    6. # self.right = right
    7. class Solution:
    8. def isSymmetric(self, root: Optional[TreeNode]) -> bool:
    9. queue = [(0, root)]
    10. result = []
    11. while queue:
    12. level, cur = queue.pop(0)
    13. if cur:
    14. result.append((level, cur.val))
    15. queue.append((level + 1, cur.left))
    16. queue.append((level + 1, cur.right))
    17. else:
    18. result.append((level, '#'))
    19. d = defaultdict(list)
    20. for level, cur in result[1:]:
    21. d[level].append(cur)
    22. for v in d.values():
    23. if v[:len(v) // 2] != v[len(v) // 2:][::-1]:
    24. return False
    25. return True

  • 相关阅读:
    Linux下NANDFLASH probe函数分析
    基于小波变换的分形信号r指数求解算法matlab仿真
    林乐博士走进中国人民大学,讲述区块链的理解与实践
    mall :rabbit项目源码解析
    Shell 脚本面试指南
    数据标准化
    vscode的窗口下拉显示行数不够
    C++进阶---智能指针
    C++ pair的介绍和使用输出
    Linux 安装 cuda
  • 原文地址:https://blog.csdn.net/yunjieheng/article/details/132985309