zoukankan      html  css  js  c++  java
  • LeetCode 102. 二叉树的层序遍历 | Python

    102. 二叉树的层序遍历


    题目来源:https://leetcode-cn.com/problems/binary-tree-level-order-traversal

    题目


    给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。

    示例:

    二叉树:[3,9,20,null,null,15,7],

        3
       / 
      9  20
        /  
       15   7
    

    返回其层次遍历结果:

    [
      [3],
      [9,20],
      [15,7]
    ]
    

    解题思路


    思路:广度优先搜索

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

    广度优先搜索(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
    
    

    实现结果


    实现结果


    以上就是使用广度优先搜索,借助队列先入先出的性质,逐层遍历,得到所需求的解,进而解决《102. 二叉树的层序遍历》问题的主要内容。


    欢迎关注微信公众号《书所集录》

  • 相关阅读:
    NoSql数据库简介及Redis学习
    C++内存泄露
    实现堆排、快排、归并
    常见C/C++笔试、面试题(二)
    Linux的五种I/O模式
    设计模式之Iterator模式
    MapReduce简介
    PHP字符串函数试题
    PHP之curl函数相关试题
    PHP数学函数试题
  • 原文地址:https://www.cnblogs.com/yiluolion/p/12884471.html
Copyright © 2011-2022 走看看