前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >102 二叉树的层序遍历

102 二叉树的层序遍历

作者头像
木瓜煲鸡脚
发布2021-01-18 15:27:22
3420
发布2021-01-18 15:27:22
举报
文章被收录于专栏:Jasper小笔记Jasper小笔记

01

题目信息

题目地址: https://leetcode-cn.com/problems/binary-tree-level-order-traversal/

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

示例:

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

代码语言:javascript
复制
    3
   / \
  9  20
    /  \
   15   7
返回其层序遍历结果:

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

02

解法一:广度优先遍历

没想到这题居然是中等,来人啊!

言归正传,题目让你层序遍历也就是广度遍历然后放到容器里。就是纯遍历一次没有别的操作了

代码语言:javascript
复制
public List<List<Integer>> levelOrder(TreeNode root) {
    //定义结果集
    List<List<Integer>> result = new ArrayList<>();
    //根节点为空
    if(root = null) return result;
    //实现队列(也可以用别的LinkedList快一点)
    Queue<TreeNode> queue = new LinkedList<TreeNode>();
    queue.offer(root);
    while(!queue.isEmpty()){
        //每一层的遍历
        List<Integer> level = new ArrayList<Integer>();
        int size = queue.size();
        for(int i = 0; i < size; i++){
            TreeNode node = queue.poll();
            level.add(node);
            if(node.left != null) queue.offer(node.left);
            if(node.right != null) queue.offer(node.right);
        }
        result.add(level);
    }
    return result;
}

遍历整个树时间复杂度O(n),队列小于n空间复杂度为O(n)

03

解法二:深度优先遍历

这里我们折腾一下,这题广度就是题目它的意思来的。但偏偏就要用深度写下

不同的是广度每次内层循环就完成一层节点的遍历,外层去添加这一层的List,深度的话遍历第一个是第一层的第二个就是第二层了第三个就是第三层的第一个了,因此需要先记下层级

代码语言:javascript
复制
public List<List<Integer>> levelOrder(TreeNode root) {
    //结果集
    List<List<Integer>> result = new ArrayList<List<Integer>>();
    if(root == null) return result;
    dfs(1,root,result);
    return result;
} 
public void dfs(int level, TreeNode root, List<List<Integer>> result) {
    //容器大小小于层级则添加一个新层级
    if(result.size()<level) {
        result.add(new ArrayList<Integer>());
    }
    //往对应的层级List添加值
    result.get(level - 1).add(root.val);
    //往下面走,层级+1
    if(root.left!=null) {
        dfs(level+1, root.left, result);
    }
    if(root.right!=null) {
        dfs(level+1, root.right, result);
    }
}

04

总结

还是与之前一样,用来熟悉树的遍历,基本上一个题两大种遍历方式都是可以完成,只不过是适用性不一样。总之多思考多熟练树遍历的操作过程

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-12-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT那个小笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 01
  • 02
  • 03
  • 04
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档