【菜鸡刷题-牛客网NC15】层序遍历 || bfs || 层数计数 || python


@author = YHR | 代码原创 | 创作不易!转载请标明来源!


文章目录

  • 题目描述
  • 题目重点
  • python代码


题目描述

给定一个二叉树,返回该二叉树层序遍历的结果,(从左到右,一层一层地遍历)
例如:
给定的二叉树是:
【菜鸡刷题-牛客网NC15】层序遍历 || bfs || 层数计数 || python_第1张图片
【菜鸡刷题-牛客网NC15】层序遍历 || bfs || 层数计数 || python_第2张图片

题目重点

  1. 同一层从左到右按顺序存储;
  2. 每一层,对应于 数组一个维度。
  3. 每一层的所有结点都存在数组的同一维度里;

思路关键词: 层序遍历 – bfs – 队列 – 层数计数

要注意的有几点:

  1. 与普通BFS层序遍历,每次结点入队不同,这里入队的是另一种结构: 【结点(node),层数(int)】 (root 结点的层数默认为0。)
  2. 每次队列弹出队首元素parent,他的左孩子如果存在,左孩子的层数一定等于parent层数+1,也就是层数等于parent[1]+1; 右孩子同理;
  3. parent 存入order数组里,根据parent[1]记载的层数,确认存在order的第几维度里,如果order的维度(len(order)-1) < parent[1],order新增一个维度。

python代码

class Solution:
    def levelOrder(self , root):
        # write code here
        if root is  None:
            order = []
        else:
            order = [[]]
            queue = [] 
            queue.append([root, 0])  
            # 第一项记载点, 第二项记载当前点所在的层数
            while len(queue) > 0:
                parent = queue.pop(0)
                # 比较当前层数是否超过order维度
                if len(order)-1 >= parent[1]:
                	# 没超过,存入对应维度
                    order[parent[1]].append(parent[0].val)
                else:
                	# 超过,新增一维,用于存储parent
                    order.append([])
                    order[parent[1]].append(parent[0].val)
                
                if parent[0].left is not None:
                    queue.append([parent[0].left, parent[1]+1])
                if parent[0].right is not None:
                    queue.append([parent[0].right, parent[1]+1])
        return order

你可能感兴趣的:(数据结构与刷题,二叉树,队列,数据结构)