leetcode刷题-102二叉树的层序遍历

206 阅读1分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

leetcode102-二叉树的层序遍历

前文

本文为菜鸟的刷题记录,仅用作笔记使用,并非最佳解决方案。

题目信息

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

3

/
9 20 /
15 7 返回其层序遍历结果:

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

解题思路分析

解法1

想要解决二叉树层序遍历的问题,首先要弄清楚什么是层序遍历。层序遍历是指二叉树按照层级进行逐步遍历的操作。主要的思路是利用层级性质进行递归。每层进行遍历时,同时对层级进行增加。因此随着数据进行递归,能够获取到相应层级的二叉树数组。进行非空判断后,将节点的值存储对应的数组位置即可。经过遍历也就得到了全部的二叉树节点层序遍历结果,遍历主要采用前序遍历的方式。 代码如下:

public int cnt = 0;
public List<List<Integer>> list = new ArrayList<>();
public List<List<Integer>> levelOrder(TreeNode root) {
    int level = cnt;
    if(root != null){
        if(list.size() < level + 1 || list.get(level) == null){
            list.add(new ArrayList<>());
            list.get(level).add(root.val);
        }
        cnt++;
        levelOrder(root.left,cnt);
        levelOrder(root.right,cnt);
    }
    return list;
}

public List<List<Integer>> levelOrder(TreeNode root,int value) {
    int level = value;
    if(root != null){
        if(list.size() < level + 1 || list.get(level) == null){
            list.add(new ArrayList<>());
        }
        list.get(level).add(root.val);
        value++;
        levelOrder(root.left,value);
        levelOrder(root.right,value);
    }
    return list;
}

复杂度分析

  • 时间复杂度 o(n)
  • 空间复杂度 o(n)

后记

  • 千古兴亡多少事?悠悠。不尽长江滚滚流。