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


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



题目描述

给定一个二叉树,返回该二叉树层序遍历的结果,(从左到右,一层一层地遍历)
例如:
给定的二叉树是:
在这里插入图片描述
在这里插入图片描述

题目重点

  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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值