107.二叉树的层序遍历II

简介: 最近在搞算法,也是在网上找了很多的资源去学习,下面就分享一道leetcode的算法题,也算提供一种思路。

最近在搞算法,也是在网上找了很多的资源去学习,下面就分享一道leetcode的算法题,也算提供一种思路。


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

例如:

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



这道二叉树的题目我们就借助队列来完成

class Solution {
    public List<List<Integer>> levelOrderBottom(TreeNode root) {
      //保存得到的结果
        List<List<Integer>> resList = new ArrayList<>();
        //判断是否为空
        if(root==null){
            return resList;
        }
        //创建一个队列,借助队列来完成层级的遍历
        Queue<TreeNode> queue = new LinkedList<>();
        //offer在尾部添加元素
        queue.offer(root);
        //当队列不为空时,则
        while(!queue.isEmpty()){
          //创建一个List
            List<Integer> integerList=new ArrayList<>();
            //获取queue的长度
            int len = queue.size();
            //当len大于0进入循环
            while(len>0){
            //poll删除并返回
                TreeNode tpnode = queue.poll();
                //将tpnode的值加入到刚才创建的列表里面
                integerList.add(tpnode.val);
                //然后分别加入左右子树
                if(tpnode.left != null){
                    queue.offer(tpnode.left);
                }
                if(tpnode.right !=null){
                    queue.offer(tpnode.right);
                }
                //这里减去已经出来的第一个结点
                len--;
            }
            resList.add(integerList);
        }
        //从后往前遍历再放入新数组里面
        List<List<Integer>> result = new ArrayList<>();
        for (int i = resList.size() - 1; i >= 0; i-- ) {
            result.add(resList.get(i));
        }
        return result;
    }
}

下面的过程希望帮助大家理解,字有点丑,见谅,本来想做动图的,但是有点费时间,所以别人的原创作品真的值得尊敬,所以不要随便抄袭别人的成果。


相关文章
|
6月前
|
存储 算法 Java
二叉树层序遍历
二叉树层序遍历
47 0
|
6月前
|
算法
【二叉树】层序遍历
【二叉树】层序遍历
67 0
【LeetCode】102. 二叉树的层序遍历、107. 二叉树的层序遍历 II
102. 二叉树的层序遍历 102. 二叉树的层序遍历 给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点) 示例:
40 0
04_二叉树的层序遍历
04_二叉树的层序遍历
05_二叉树的层次遍历II
05_二叉树的层次遍历II
08_N叉树的层序遍历
08_N叉树的层序遍历
|
6月前
|
C++
二叉树的后序遍历(C++)
二叉树的后序遍历(C++)
44 0
|
6月前
|
Linux
求二叉树的先序遍历
求二叉树的先序遍历