题目:
给你二叉树的根节点 root ,返回其节点值 自底向上的层序遍历 。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)
示例 1:

输入:root = [3,9,20,null,null,15,7]
输出:[[15,7],[9,20],[3]]
示例 2:
输入:root = [1]
输出:[[1]]
示例 3:
输入:root = []
输出:[]
提示:
-
树中节点数目在范围 [0, 2000] 内
-
-1000 <= Node.val <= 1000
思路如下:
102题基础上结果倒转。
题解如下:
python
#两个数组
class Solution:
def levelOrder(self, root):
"""
:type: root: Optional[TreeNode]
:rtype: List[List[int]]
"""
if root is None:
return []
ans = []
cur = [root]
while cur:
nxt = [] # 存储下一层的节点
vals = [] # 存储当前层的节点值
for node in cur:
vals.append(node.val) # 收集当前层节点的值
if node.left: nxt.append(node.left) # 左子节点加入下一层
if node.right:nxt.append(node.right) # 右子节点加入下一层
cur = nxt # 更新当前层为下一层
ans.append(vals) # 将当前层结果加入最终列表
return ans[::-1]
#一个队列
class Solution:
def levelOrder(self, root):
"""
:type: root: Optional[TreeNode]
:rtype: List[List[int]]
"""
if root is None:
return []
ans = []
q = deque([root])
while q:
vals = []
for _ in range(len(q)): # 固定当前层的节点数量
node = q.popleft() # 弹出队列最左侧节点(先进先出)
vals.append(node.val)
if node.left: q.append(node.left) # 左子节点加入队列
if node.right:q.append(node.right) # 右子节点加入队列
ans.append(vals)
return ans[::-1]
倒转代码:return ans[::-1]