leetcode 102. 二叉树的层序遍历(python)

导读:本篇文章讲解 leetcode 102. 二叉树的层序遍历(python),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

二叉树的层序遍历

leetcode 地址
思路:广度优先搜索

本题,我们使用广度优先搜索的思路来解决。

广度优先搜索(BFS),它是按照层进行搜索的。题目中要求,按层序遍历得到所需的节点。那么这里就跟 BFS 访问的方式吻合。

在这里,我们借助队列,保存每层的所有节点,然后每次把队列里所有的节点都进行出队操作。出队这里需要注意,保存每层所有节点的时候,这里先可以标记每层的节点数,那么在出队的时候,循环遍历的次数就等于当前层数的节点数。

此时遍历每层节点时,如果当前节点的左右节点非空时,再次加入队列。循环操作,这样每层都能够被遍历,队列为空时,就能得到想要的结果

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def levelOrder(self, root: TreeNode) -> List[List[int]]:
        # 先处理特殊情况
        if not root:
            return []

        # 返回结果
        res = []

        from collections import deque
        # 定义队列
        queue = deque()
        # 将根节点入队
        queue.append(root)
        # 队列不为空,表达式二叉树还有节点,循环遍历
        while queue:
            # 先标记每层的节点数
            size = len(queue)
            # 定义变量,记录每层节点值
            level = []
            # 这里开始遍历当前层的节点
            for _ in range(size):
                # 出队
                node = queue.popleft()
                # 先将当前节点的值存储
                level.append(node.val)
                # 节点的左右节点非空时,入队
                if node.left is not None:
                    queue.append(node.left)
                if node.right is not None:
                    queue.append(node.right)
            # 添加每层的节点值列表
            res.append(level)
        return res

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/76922.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!