博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【LeetCode】102. 二叉树的层序遍历
阅读量:2004 次
发布时间:2019-04-28

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

题目描述

给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。

示例:

二叉树:[3,9,20,null,null,15,7],

3    / \   9  20     /  \    15   7

返回其层次遍历结果:

[   [3],   [9,20],   [15,7] ]

题解

我想用栈来实现,但是发现有些问题。日后再补充。

现在,干脆就直接学习学习他人的优秀算法,顺便记录一下感想。

该算法题解来自~

微信公众号:看图学算法
链接:https://mp.weixin.qq.com/s/oI_pmqvaA9AFQUPxKX13vw

广度优先BFS处理是很直观的,可以想象成是一把刀横着切割了每一层,但是深度优先遍历就不那么直观了。

4.jpg

我们开下脑洞,把这个二叉树的样子调整一下,摆成一个田字形的样子。

田字形的每一层就对应一个list。
5.jpg

按照深度优先DFS的处理顺序,会先访问节点1,再访问节点2,接着是节点3。

之后是第二列的4和5,最后是第三列的6。
每次递归的时候都需要带一个index(表示当前的层数),也就对应那个田字格子中的第几行,如果当前行对应的list不存在,就加入一个空list进去。

动态演示如下:

0203_1.gif

代码

import java.util.*;	class Solution {
void dfs(int index,TreeNode root, List
> res) {
//每次递归的时候都需要带一个index(表示当前的层数) //如果当前行对应的list不存在,就加入一个空list进去。 //假设res是[ [1],[2,3] ], index是3,就再插入一个空list放到res中 if(res.size()
()); } //将当前节点的值加入到res中,index代表当前层,假设index是3,节点值是99 //res是[ [1],[2,3] [4] ],加入后res就变为 [ [1],[2,3] [4,99] ] res.get(index-1).add(root.val); //递归的处理左子树,右子树,同时将层数index+1 if(root.left!=null) {
dfs(index+1, root.left, res); } if(root.right!=null) {
dfs(index+1, root.right, res); } } public List
> levelOrder(TreeNode root) {
if(root==null) {
return new ArrayList
>(); } //用来存放最终结果 List
> res = new ArrayList
>(); dfs(1,root,res); return res; } }

时间复杂度:**O(N)

空间复杂度:O(h),h是树的高度

心得体会

首先,我绝对不会想到用list,因为我对集合一是不敏感,二是基础知识掌握不多。

第二点是,灵活性的不足,即使我想不到list,但是我也没想过“我们开下脑洞,把这个二叉树的样子调整一下,摆成一个田字形的样子”🤣
先前写算法基本都是用C来写,偶尔用C++。
有的题目用C写起来轻松,但是有的却用Java轻松。
很必要的一点,就是学会使用两种及以上的语言来写算法。

其他题解


图片来源:微信公众号“看图学算法”

学习笔记,待补充…

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

你可能感兴趣的文章
【源码在文末】SpringSession实战使用(基于SpringBoot项目)
查看>>
QQ号终于能修改了?
查看>>
Kafka如果丢了消息,怎么处理的?
查看>>
1.3 万亿条数据查询,如何做到毫秒级响应?
查看>>
Spring Boot 项目瘦身指南,瘦到不可思议!
查看>>
高赞回答:为什么高级程序员不必担心自己的技术过时?
查看>>
支持 Dubbo 接口文档生成的工具
查看>>
开源!基于SpringBoot的车牌识别系统(附项目地址)
查看>>
Redis热点:如何发现Key问题?附5种解决方案
查看>>
SpringBoot集成WebSocket,实现后台向前端推送信息
查看>>
基于SpringBoot实现单点登录系统
查看>>
这位“华为天才少年”,竟然要我用“充电宝”打《只狼》
查看>>
优秀程序员早就学会用“状态模式”代替if-else了
查看>>
加强版Redis,又一款国产高性能KV存储数据库开源了!
查看>>
介绍一款基于 SpringBoot 开发 OA 开源产品 !
查看>>
Github 买 Star?
查看>>
小心了!通过一张照片我能找到你拍照的精确位置!
查看>>
使用基于 SpringMVC 的透明 RPC 开发微服务
查看>>
写“好”代码的十九条准则
查看>>
推荐几款 Redis 可视化工具
查看>>