102. 二叉树的层序遍历
题目描述
给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。
示例 1:
输入:root = [3,9,20,null,null,15,7]
输出:[[3],[9,20],[15,7]]
示例 2:
输入:root = [1]
输出:[[1]]
示例 3:
输入:root = []
输出:[]
思路&代码
没什么技巧,就用了个队列。
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
from queue import Queue
class Solution:
def levelOrder(self, root: TreeNode) -> List[List[int]]:
if not root:
return []
res = []
q_node = Queue()
q_node.put(root)
while not q_node.empty():
l = []
for i in range(q_node.qsize()):
node = q_node.get()
l.append(node.val)
if node.left:
q_node.put(node.left)
if node.right:
q_node.put(node.right)
res.append(l)
return res
复杂度分析
记树上所有节点的个数为 n。
时间复杂度:每个点进队出队各一次,故渐进时间复杂度为
O
(
n
)
O(n)
O(n)。
空间复杂度:队列中元素的个数不超过 $n¥ 个,故渐进空间复杂度为
O
(
n
)
O(n)
O(n)。