#! /usr/bin/env python
# -*- coding: utf-8 -*-
# __author__ = "Victor"
# Date: 2020/7/9
# 题目描述, 给定一颗二叉树, 返回每一层列表的列表
# 比如[[3], [5, 8], [2, 4, 5]], 3的左右是5,8, 5的左右是2, 4, 8的左是5
# 节点信息,注意只是伪代码,思考用
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
# 输入的肯定是一棵树的根节点
class Solution:
def levelOrder(self, root: TreeNode) -> list[list[int]]:
"""
二叉树的特色就是每个节点都包含着下一个节点的信息;
需要一个队列以每层为基本处理单位,
每次, 遍历每层,每层节点的值放入一个临时列表, 每层节点的下一级左右节点放入队列
:param root:
:return:
"""
# 根节点为空直接返回
if root == None:
return []
# 初始化队列条件, 肯定是初始化根节点
queue = [root]
# 总列表
all_values = []
# 总条件队列不为空即可一直对树处理节点
while queue:
# 每次处理一棵树一层的数据
temp_value = []
for i in range(len(queue)):
tempNode = queue.pop(0)
temp_value.append(tempNode.val)
# 将该层的子节点添加到下次处理的队列中
if tempNode.left:
queue.append(tempNode.left)
if tempNode.right:
queue.append(tempNode.right)
all_values.append(temp_value)
return all_values