博客
关于我
力扣 - 102. 二叉树的层序遍历
阅读量:450 次
发布时间:2019-03-06

本文共 1387 字,大约阅读时间需要 4 分钟。

目录

题目

思路1(迭代)

  • BFS广度优先搜索
  • 用队列先进先出特性遍历

代码

class Solution {    public List
> levelOrder(TreeNode root) { List
> res = new LinkedList<>(); if (root == null) { return res; } Deque
queue = new LinkedList<>(); queue.offer(root); while (!queue.isEmpty()) { List
level = new LinkedList<>(); int size = queue.size(); while (size > 0) { TreeNode node = queue.poll(); level.add(node.val); if (node.left != null) { queue.offer(node.left); } if (node.right != null) { queue.offer(node.right); } size--; } res.add(level); } return res; }}

复杂度分析

  • 时间复杂度:\(O(N)\)
  • 空间复杂度:\(O(N)\)

思路2(递归)

  • DFS深度优先搜索
  • res.size() < index:每一层只能添加一个链表用来存储本层节点的值
  • 每次搜索遍历都将本节点添加道对应的层的位置

代码

class Solution {    public List
> levelOrder(TreeNode root) { List
> res = new LinkedList<>(); if (root == null) { return res; } dfs(1, res, root); return res; } public void dfs(int index, List
> res, TreeNode root) { if (root == null) { return; } // 每层只能添加一个链表 if (res.size() < index) { res.add(new LinkedList<>()); } // 将节点的值添加道本层的链表中 res.get(index-1).add(root.val); dfs(index+1, res, root.left); dfs(index+1, res, root.right); }}

复杂度分析

  • 时间复杂度:\(O(N)\)
  • 空间复杂度:\(O(h)\),其中 h 为树的高度

转载地址:http://lspyz.baihongyu.com/

你可能感兴趣的文章
Mysql学习总结(37)——Mysql Limit 分页查询优化
查看>>
Mysql学习总结(38)——21条MySql性能优化经验
查看>>
Mysql学习总结(39)——49条MySql语句优化技巧
查看>>
Mysql学习总结(3)——MySql语句大全:创建、授权、查询、修改等
查看>>
Mysql学习总结(40)——MySql之Select用法汇总
查看>>
Mysql学习总结(41)——MySql数据库基本语句再体会
查看>>
Mysql学习总结(42)——MySql常用脚本大全
查看>>
Mysql学习总结(43)——MySQL主从复制详细配置
查看>>
Mysql学习总结(44)——Linux下如何实现mysql数据库每天自动备份定时备份
查看>>
Mysql学习总结(45)——Mysql视图和事务
查看>>
Mysql学习总结(46)——8种常被忽视的SQL错误用法
查看>>
Mysql学习总结(48)——MySql的日志与备份还原
查看>>
Mysql学习总结(49)——从开发规范、选型、拆分到减压
查看>>
Mysql学习总结(4)——MySql基础知识、存储引擎与常用数据类型
查看>>
Mysql学习总结(50)——Oracle,mysql和SQL Server的区别
查看>>
Mysql学习总结(51)——Linux主机Mysql数据库自动备份
查看>>
Mysql学习总结(52)——最全面的MySQL 索引详解
查看>>
Mysql学习总结(53)——使用MySql开发的Java开发者规范
查看>>
Mysql学习总结(54)——MySQL 集群常用的几种高可用架构方案
查看>>
Mysql学习总结(55)——MySQL 语句大全再温习
查看>>