题目描述:

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

输入:root = [3,9,20,null,null,15,7]
输出:[[15,7],[9,20],[3]]

思路分析:

这个题主要还是二叉树的层序遍历问题。二叉树的层序遍历使用队列来进行模拟即可,出队一个的同时将这个节点孩子节点全部加入队列。

但是他要求逆序输入,所以有两个做法:1.在插入的时候采用头插法进行插入。2.插入后使用逆序遍历一次即可。

重点记住层序遍历的大概逻辑:通过记录当前队列的长度来确定一次遍历出队的节点数量(一层的节点数量)

头插法的实现

res = append([][]int{tem},res... ) tem是[]int{}

res...的作用是将一个切片展开,res是二维切片,展开后每个元素就是一个一维切片,然后append的第一参数是目标切片,将第二个元素添加到第一个参数后。从而实现头插的作用。

点击查看代码
func levelOrderBottom(root *TreeNode) [][]int {
res,line:=[][]int{},[]*TreeNode{}
if root==nil {
return [][]int{}
}
line = append(line, root)
for len(line)>0 {
levelSize,tem := len(line),[]int{}
for i := 0; i < levelSize; i++ {
node := line[0]
line = line[1:]
if node != nil {
tem = append(tem, node.Val)
}
if node.Left != nil {
line = append(line, node.Left)
}
if node.Right != nil {
line = append(line, node.Right)
}
}
//双端队列适合无法进行翻转的场景,直接使用头插法
//res = append([][]int{tem},res... )
res = append(res, tem)
}
// 最后反转层次结果
for i, j := 0, len(res)-1; i < j; i, j = i+1, j-1 {
res[i], res[j] = res[j], res[i]
}
return res
}

107. 二叉树的层序遍历 II Golang实现的更多相关文章

  1. 刷题-力扣-107. 二叉树的层序遍历 II

    107. 二叉树的层序遍历 II 题目链接 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/binary-tree-level-order-tr ...

  2. 107. 二叉树的层次遍历 II

    107. 二叉树的层次遍历 II 题意 给定一个二叉树,返回其节点值自底向上的层次遍历. (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历). 解题思路 递归:利用前序遍历的思想,在递归过程中 ...

  3. Java实现 LeetCode 107 二叉树的层次遍历 II(二)

    107. 二叉树的层次遍历 II 给定一个二叉树,返回其节点值自底向上的层次遍历. (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历) 例如: 给定二叉树 [3,9,20,null,null, ...

  4. LeetCode 107 ——二叉树的层次遍历 II

    1. 题目 2. 解答 与 LeetCode 102 --二叉树的层次遍历 类似,我们只需要将每一层的数据倒序输出即可. 定义一个存放树中数据的向量 data,一个存放树的每一层数据的向量 level ...

  5. [LeetCode] 107. 二叉树的层次遍历 II

    题目链接 : https://leetcode-cn.com/problems/binary-tree-level-order-traversal-ii/ 题目描述: 给定一个二叉树,返回其节点值自底 ...

  6. LeetCode107. 二叉树的层次遍历 II

    107. 二叉树的层次遍历 II 描述 给定一个二叉树,返回其节点值自底向上的层次遍历. (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历) 示例 例如,给定二叉树: [3,9,20,null ...

  7. LeetCode-107-二叉树的层序遍历 II

    二叉树的层序遍历 II 题目描述:给定一个二叉树,返回其节点值自底向上的层序遍历. (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历) 示例说明请见LeetCode官网. 来源:力扣(Leet ...

  8. 【LeetCode-面试算法经典-Java实现】【107-Binary Tree Level Order Traversal II(二叉树层序遍历II)】

    [107-Binary Tree Level Order Traversal II(二叉树层序遍历II)] [LeetCode-面试算法经典-Java实现][全部题目文件夹索引] 原题 Given a ...

  9. 二叉树的层序遍历 BFS

    二叉树的层序遍历,或者说是宽度优先便利,是经常考察的内容. 问题一:层序遍历二叉树并输出,直接输出结果即可,输出格式为一行. #include <iostream> #include &l ...

  10. lintcode : 二叉树的层次遍历II

    题目 二叉树的层次遍历 II 给出一棵二叉树,返回其节点值从底向上的层次序遍历(按从叶节点所在层到根节点所在的层遍历,然后逐层从左往右遍历) 样例 给出一棵二叉树 {3,9,20,#,#,15,7}, ...

随机推荐

  1. Docker学习11-Docker常规方式安装软件

    本文咱们将通过按照Tomcat.按照MySQL.安装Redis这三个实战安装,来熟悉在docker中怎么安装软件,咱们使用端口映射,及数据卷的使用场景 安装的总体步骤: 1:搜索镜像: 2:拉取镜像: ...

  2. python pyqt6 设定窗口置顶

    self.setWindowFlag(Qt.WindowType.WindowStaysOnTopHint)即可效果一般,页面会出现闪烁一次, # 置顶按钮 self.top_button = QPu ...

  3. vue3 如何获取 dom

    1. 通过 ref     1. 在 html 标签上指定 ref 属性     2. 在 setup 中定义并返回.注意:标签上的 ref 属性名需要跟 setup 中的对应 <h1 ref= ...

  4. Failed to convert value of type 'java.lang.String' to required type

    DEBUG 微信小程序Java后台 Failed to convert value of type 'java.lang.String' to required type 产生这种条件的原因一般是使用 ...

  5. 使用VSCode搭建UniApp + TS + Vue3 + Vite项目

    uniapp是一个使用Vue.js开发所有前端应用的框架,开发者编写一套代码,可发布到iOS.Android.以及各种小程序.深受广大前端开发者的喜爱.uniapp官方也提供了自己的IDE工具HBui ...

  6. CSS & JS Effect – 用 wheel 模拟 scroll

    前言 在 用 JavaScript 实现 position sticky 文章中,我提到了用 wheel 来模拟 scroll 效果. 这篇来说说具体怎么实现,挺简单的哦. Preparation t ...

  7. Maven高级——多环境配置与应用

    多环境配置与应用 开发步骤 定义多环境 <!--配置多环境--> <profiles> <!--开发环境--> <profile> <id> ...

  8. Spring —— (Spring管理第三方资源)数据源对象管理

    数据源对象管理      (用户名密码等敏感的数据不会直接放在bean中 而是放在properties文件中进行管理)    加载properties文件      在resource中创建 jdbc ...

  9. Spring —— DI入门案例

    DI入门案例   思路分析:     1.基于IoC管理bean     2.Service中使用new形式创建的Dao对象是否保留(否)     3.Service中需要的Dao对象如何进入Serv ...

  10. 阿里面试让聊一聊Redis 的内存淘汰(驱逐)策略

    大家好,我是 V 哥,粉丝小A面试阿里,说被问到 Redis 的内存淘汰策略的问题,整理这个笔记给他参考,也分享给大家,如果你遇到这个问题,会怎么回答呢? Redis 的内存淘汰策略是指当Redis的 ...