题目
- 给你二叉树的根节点 root ,返回其节点值 自底向上的层序遍历 。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)
![]()
python
题解:BFS
- 用BFS把每层的结点存在一个单独的列表里,最后翻转整个结果列表
class Solution:
def levelOrderBottom(self, root: Optional[TreeNode]) -> List[List[int]]:
if not root:# 如果根节点为空,直接返回空列表
return []
res=[]# 存储结果的列表
q=[]# 使用列表作为队列
q.append(root)# 将根节点加入队列
#step=1# 记录当前层的编号
while q:#当队列不为空时
size=len(q)
res1=[] # 存储当前层的结果
for _ in range(size):
cur = q.pop(0)# 从队列头部取出节点
res1.append(cur.val)# 将当前节点的值加入当前层的结果列表
if cur.left:# 将左子节点加入队列
q.append(cur.left)
if cur.right:# 将右子节点加入队列
q.append(cur.right)
res.append(res1) # 将当前层的结果列表加入最终结果列表
#step+=1 # 增加层编号
res.reverse() # 反转最终结果列表
return res
javascript
题解:层序遍历
var levelOrderBottom = function(root) {
if(root===null) return []
let res = []
let queue = [root]
while(queue.length>0){
let n = queue.length
let cur_list = []
for (let i=0;i<n;i++){
let cur_node = queue.shift()
cur_list.push(cur_node.val)
if(cur_node.left) queue.push(cur_node.left)
if(cur_node.right) queue.push(cur_node.right)
}
// 从数组前头插入值,避免最后反转数组,减少运算时间
res.unshift(cur_list)
}
return res
};