二叉树的层序遍历 II

题目描述:给定一个二叉树,返回其节点值自底向上的层序遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)

示例说明请见LeetCode官网。

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/binary-tree-level-order-traversal-ii/

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解法一:层序遍历
  • 首先,如果根节点为空,直接返回空的结果集。
  • 如果根节点不为空,通过队列来遍历每一层的节点,具体处理过程如下:
    • 首先将根节点放入队列;
    • 遍历队列中当前的节点数,即为当前层的结果,然后再将当前层节点的左右非空子节点放入到队列中 ;
    • 然后继续遍历队列中下一层的节点,直到队列为空位置。
  • 这样得到的结果是从上往下层序遍历的结果, 最后调用Collections.reverse(result);这个方法,将得到的结果集逆序排列,即可得到自底向上的层序遍历。
import com.kaesar.leetcode.TreeNode;

import java.util.*;

public class LeetCode_107 {
/**
* 层序遍历
*
* @param root
* @return
*/
public static List<List<Integer>> levelOrderBottom(TreeNode root) {
// 初始化结果集
List<List<Integer>> result = new ArrayList<>();
// 如果根节点为空,直接返回result
if (root == null) {
return result;
}
// 用一个队列存每一层的节点
Queue<TreeNode> nodes = new LinkedList<>();
nodes.add(root);
// 遍历每一层的节点,将节点的值放入list中
while (!nodes.isEmpty()) {
int count = nodes.size();
List<Integer> curLevel = new ArrayList<>();
while (count > 0) {
TreeNode cur = nodes.poll();
curLevel.add(cur.val);
if (cur.left != null) {
nodes.add(cur.left);
}
if (cur.right != null) {
nodes.add(cur.right);
}
count--;
}
result.add(curLevel);
}
// 最后将得到的结果集逆序,得到从最下层 -> 最上层的遍历结果
Collections.reverse(result);
return result;
} public static void main(String[] args) {
// 测试用例
TreeNode root = new TreeNode(3);
root.left = new TreeNode(9);
root.right = new TreeNode(20);
root.right.left = new TreeNode(15);
root.right.right = new TreeNode(7); for (List<Integer> integers : levelOrderBottom(root)) {
for (Integer integer : integers) {
System.out.print(integer + " ");
}
System.out.println();
}
}
}

【每日寄语】 多少事,从来急,天地转,光阴迫,一万年太久,只争朝夕。

最新文章

  1. ASP.NET MVC之Unobtrusive Ajax(五)
  2. Java新集合示意图
  3. 旅图beta版 asp.net web api 单元测试
  4. Bootstrap Modals(模态框)
  5. jira插件带ui界面和几种方式
  6. 带搜索框的下拉框chosen.jQury.js
  7. sed简单实例练习
  8. Dom编程(三)
  9. oracle sql语句跟踪及性能分析工具实现
  10. UGUI中显示粒子特效
  11. 5.创建表,使用alter进行表信息的增删改,Oracle回收站,集合运算
  12. 101210-450789-147200(可以激活Xshell5,而且可以升级) 亲测可用 只能用于xshell5
  13. PS打造油画般的风景人像
  14. gotty---用来作为k8s的web terminal,通过参数读取指定pod的日志输出
  15. -第3章 jQuery方法实现下拉菜单显示和隐藏
  16. 利用WCF实现上传下载文件服务
  17. java 集合 Se HashTreeSet
  18. Data Visualization Books
  19. Spring Cloud Sleuth Zipkin - (1)
  20. android系列9.LinearLayout学习

热门文章

  1. 营销MM让我讲MySQL日志顺序读写及数据文件随机读写原理
  2. Java基础之Scanner类中next()与nextLine()方法的区别
  3. centos7 安装yum源
  4. js变量类型判断 严格通用 Object.prototype.toString.call()
  5. js获取 url?后面的参数取值
  6. 【NetCore】依赖注入的一些理解与分享
  7. SQL性能优化技巧
  8. postman项目接口文档和登录步骤原理
  9. Solution -「多校联训」最小点覆盖
  10. Hyperledger Fabric 2.x Java区块链应用