首页 > 其他 > 详细

107-二叉树的层次遍历 II

时间:2020-09-06 08:34:43      阅读:79      评论:0      收藏:0      [点我收藏+]

题目

技术分享图片

分析

这里还是很简单,就是平常的层序遍历就完事了。个人觉得主要是考察基础知识,比如二维数组的初始化,队列的一些操作。解答过程主要是构建一个数组对每层节点进行记录,然后结果倒序就好了。我这里倒叙通过遍历数组实现,官方解答充分利用了list数组的add方法,通过指定每次添加位置为第一位。为不是平常的最后一位来实现倒叙。

代码

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public List<List<Integer>> levelOrderBottom(TreeNode root) {
        List<List<Integer>> list = new LinkedList<List<Integer>>();
        if(root == null) return list;
       Queue<TreeNode> queue = new LinkedList<TreeNode>();
       queue.offer(root);
       while(!queue.isEmpty()){
          int len = queue.size();
          List<Integer> list1 = new LinkedList<>();
          for(int i = 0 ; i < len ;++i){
              TreeNode node = queue.poll();
              list1.add(node.val);
              if(node.left != null)
                queue.offer(node.left);
              if(node.right != null)
                queue.offer(node.right);
          }
          list.add(list1);
       }
       int j = list.size()-1;
       int i = 0;
       while(i < j){
           List<Integer> list2 = new LinkedList<>();
           list2 = list.get(i);
           list.set(i,list.get(j));
           list.set(j,list2) ;
           i++;
           j--;
       }
    return list;
    }
}

注意点

  • 二维数组初始化
List<List<元素类型>> 数组名=new ArrayList<List<元素类型>>();
 
例如:
List<List<Integer>> re=new ArrayList<List<Integer>>();
  • 增删改查
//增加 
 List<Integer> FirstRow=new ArrayList<Integer>();      //新建一维数组
 FirstRow.add(1);  // 给一维数组加入元素
 re.add(FirstRow);  //将一维数组加入二维数组
re.add(index,FirstRow); //将一维数组加入二维数组的index位置。
 
//删除
remove(int index)
remove(Object o)

//改

demo.set(int index 要修改的索引值, 要修改的值)

re.get(i 行号).set(j 列号, 要修改的值)

//查
re.get(1).get(2)    //先get行号,后get 列号
  • Queue的基本操作
boolean  add(E e) //将指定的元素插入此队列(如果立即可行且不会违反容量限制),在成功时返回 true,如果当前没有可用的空间,则抛出 IllegalStateException。
E        element() //获取,但是不移除此队列的头。
boolean  offer(E e) //将指定的元素插入此队列(如果立即可行且不会违反容量限制),当使用有容量限制的队列时,此方法通常要优于 add(E),后者可能无法插入元素,而只是抛出一个异常。
E        peek() //获取但不移除此队列的头;如果此队列为空,则返回 null。
E        poll() //获取并移除此队列的头,如果此队列为空,则返回 null。
E        remove() //获取并移除此队列的头。

107-二叉树的层次遍历 II

原文:https://www.cnblogs.com/jiezao/p/13620650.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!