南京浦口做网站点嘉兴新站seo外包
题目:
给你二叉树的根节点 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题基础上结果倒转。
题解如下:
#两个数组
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]