当前位置: 首页 > article >正文

代码随想录算法训练营第13天—二叉树02 | ● *层序遍历(对应10道题) ● *226.翻转二叉树 ● 101.对称二叉树

*层序遍历(二叉树的广度优先搜索,对应10道题)

102.二叉树的层序遍历(opens new window)
107.二叉树的层次遍历II(opens new window)
199.二叉树的右视图(opens new window)
637.二叉树的层平均值(opens new window)斜体样式
429.N叉树的层序遍历(opens new window)
515.在每个树行中找最大值(opens new window)
116.填充每个节点的下一个右侧节点指针(opens new window)
117.填充每个节点的下一个右侧节点指针II(opens new window)
104.二叉树的最大深度(opens new window)
111.二叉树的最小深度

  • 考点
    • 队列
  • 我的思路
    • 和视频讲解思路一致
  • 视频讲解关键点总结
    • 利用队列实现二叉树层序遍历(因为直接利用二叉树数据结构无法实现逐层遍历,同时层序遍历要求先查询的元素先处理,因此使用队列)
    • 两层嵌套循环,初始将根节点加入队列
    • 外层循环判断队列是否为空(每次外层循环遍历当前层节点,同时查询所有下一层节点)
      • 在循环的开始记录队列的初始长度,代表当前层的节点数量
      • 开始内层循环,循环次数即为当前层节点数量
        • 循环开始,从队列中取顶层元素,将其加入最终的结果列表
        • 判断该元素(节点)是否有左右子节点,若有,加入队列
        • 进行下一次循环
    • 返回最终结果
  • 我的思路的问题
  • 代码书写问题
    • python里的queue.Queue对象不能直接作为循环的判断条件,其不支持布尔值测试,因为该类里没有进行布尔值转换的方法,因此当使用其作为判断条件时,由于该对象始终是一个对象,即条件为True,将发生无限循环(合理的方式是使用其empty方法来作为判断条件)
  • 可执行代码
# 102.二叉树的层序遍历(opens new window)
class Solution:
    def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:
        if root is None:
            return []
        my_queue = queue.Queue()
        my_queue.put(root)
        result = []
        while not my_queue.empty():
            size = my_queue.qsize()
            level = []
            while size:
                size -= 1
                cur = my_queue.get()
                level.append(cur.val)
                if cur.left:
                    my_queue.put(cur.left)
                if cur.right:
                    my_queue.put(cur.right)
            result.append(level)
        return result
# 107.二叉树的层次遍历II(opens new window)
# 题目要求逆序层次遍历,此时相较于102题的代码,只需要额外在输出之前调用列表的reverse函数逆序返回或[::-1]进行逆序切片即可

*226.翻转二叉树

题目链接/文章讲解/视频讲解:https://programmercarl.com/0226.%E7%BF%BB%E8%BD%AC%E4%BA%8C%E5%8F%89%E6%A0%91.html

  • 考点
    • 二叉树遍历+变量交换
  • 我的思路
  • 视频讲解关键点总结
    • 在遍历的基础上进行变量交换
  • 我的思路的问题
  • 代码书写问题
  • 可执行代码
# 二叉树深度优先前序遍历(递归)+变量交换
class Solution:
    def invertTree(self, root: Optional[TreeNode]) -> Optional[TreeNode]:
        if root is None:
            return root
        root.left, root.right = root.right, root.left
        self.invertTree(root.left)
        self.invertTree(root.right)
        return root

101.对称二叉树(先过年休息,年后再补上)

题目链接/文章讲解/视频讲解:https://programmercarl.com/0101.%E5%AF%B9%E7%A7%B0%E4%BA%8C%E5%8F%89%E6%A0%91.html



http://www.kler.cn/a/230909.html

相关文章:

  • 【CSS】css如何实现字体大小小于12px?
  • android 设置未知来源等 AppOpsManager 权限的设置接口
  • 算法——前缀和算法
  • <设计模式>单例模式懒汉和饿汉
  • ​​​​​​​CleanMyMac X有什么优势?到底好不好用?
  • Linux下库函数、静态库与动态库
  • 1Panel面板如何安装并结合内网穿透实现远程访问本地管理界面
  • Python编程:17个提升工作效率的自动化脚本
  • 物流|基于Springboot的物流管理系统设计与实现(源码+数据库+文档)
  • docker 入门教程之概述
  • 位运算:进制
  • dolphinscheduler海豚调度(一)简介快速体验
  • 基于51 单片机的交通灯系统 源码+仿真+ppt
  • 改变AI服务器:探索界面互连芯片技术的创新突破
  • yolov8使用旋转框自己做数据集检测
  • python 多趟算法举例
  • MySQL:从基础到实践(简单操作实例)
  • MySQL学习记录——사 表结构的操作
  • C++俄罗斯方块 -- 菜单展示和选择 -- 方法
  • 前端代码评审规范