【leetcode】每日精选题详解之107二叉树的层次遍历2

        嗨,大家好,我是袁厨(因为酷爱做饭,所以自己考取了厨师证)。之前一直看大家写的博客,学到了很多东西。然后最近萌生了自己写的想法,将自己知道的分享给需要的同学。以后每天会为大家分享leetcode精选题目的各种题解和Python, JS, JQ, CSS, PHP, JAVA的一些小Demo。请大家关注我,一起交流学习吧。


107二叉树的层次遍历2

  • 题目描述
  • BFS(队列)方法
    • 做题思路
    • 题目代码
  • 总结

题目描述

【leetcode】每日精选题详解之107二叉树的层次遍历2_第1张图片


BFS(队列)方法

做题思路

这个题目是简单题,但是另一个比它还简单的层次遍历居然是中等题,有点奇怪,不过不要紧,你学会了这个方法就两个题目都会做的。这个题目是返回一个二维的ArrayList所以我们需要创建一个一维的ArrayList,然后每次遍历完一层之后将这个一维的添加到二维里,最后再将其翻转即可。另一个题目是不需要翻转是正序的层次遍历。
【leetcode】每日精选题详解之107二叉树的层次遍历2_第2张图片
【leetcode】每日精选题详解之107二叉树的层次遍历2_第3张图片
【leetcode】每日精选题详解之107二叉树的层次遍历2_第4张图片
大概就是这个思路,我们要记住哦,我们用的是队列,先进先出原则,很适合层次遍历。

题目代码

class Solution {
     
    public List<List<Integer>> levelOrderBottom(TreeNode root) {
     
        //创建一个二维动态数组,也是我们返回的数组
          List<List<Integer>> arr = new ArrayList<List<Integer>>();
          //创建队列
          Queue<TreeNode> queue = new LinkedList<TreeNode>();       //边界情况
          if(root == null){
     
              return arr;
          }
          //将root节点存进去,这一步很重要,不然会一直输出空
          queue.offer(root);
          //执行完毕条件
          while(!queue.isEmpty()){
     
              //构建一个一维动态数组,这个用来存储每层的遍历结果
              List<Integer> array = new ArrayList<>();
              //获得当前队列的大小,这里记住要用一个变量接收,因为队列的大小是会改变的
              int size = queue.size();
              for(int i = 0 ; i < size ;i++){
     
                    //队列出列
                     TreeNode p = queue.poll();
                     //将出列的节点的值,存入一维数组中
                     array.add(p.val);
                     //左孩子和右孩子
                     TreeNode left = p.left;
                     TreeNode right =p.right;   
                     //将左右孩子入队               
                     if(p.left!=null){
     
                         queue.offer(left);
                     }
                     if(p.right!=null){
     
                         queue.offer(right);
                     }
              }
              arr.add(array);
          }
        //翻转
        Collections.reverse(arr);
        return arr;
    }
}

        


总结

感觉这个题目也不错,学会这个题目,就会做树的题目中好几个题,好几个都是需要用到层次遍历的,所以值得学习一下。

作者:LeetCode
链接:https://leetcode-cn.com/problems/rotate-array/solution/xuan-zhuan-shu-zu-by-leetcode/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

你可能感兴趣的:(leetcode每日精选,队列,leetcode,java,算法)