107. 二叉树的层序遍历 II(中)

题目

  • 给你二叉树的根节点 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

题解:层序遍历

  • unshift从数组前头插入值,避免最后反转数组
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
};
posted @   Frommoon  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示