这里还是很简单,就是平常的层序遍历就完事了。个人觉得主要是考察基础知识,比如二维数组的初始化,队列的一些操作。解答过程主要是构建一个数组对每层节点进行记录,然后结果倒序就好了。我这里倒叙通过遍历数组实现,官方解答充分利用了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 列号
boolean add(E e) //将指定的元素插入此队列(如果立即可行且不会违反容量限制),在成功时返回 true,如果当前没有可用的空间,则抛出 IllegalStateException。
E element() //获取,但是不移除此队列的头。
boolean offer(E e) //将指定的元素插入此队列(如果立即可行且不会违反容量限制),当使用有容量限制的队列时,此方法通常要优于 add(E),后者可能无法插入元素,而只是抛出一个异常。
E peek() //获取但不移除此队列的头;如果此队列为空,则返回 null。
E poll() //获取并移除此队列的头,如果此队列为空,则返回 null。
E remove() //获取并移除此队列的头。
原文:https://www.cnblogs.com/jiezao/p/13620650.html