前言
层序遍历一颗二叉树,按从左到右,再从右到左的循序交叉遍历二叉树的每一层。解决方法是假设第一层为level=0,那么对于偶数层(level%2==0)就先遍历左节点,在遍历右节点存入列表;多于奇数层再加一个列表反转的操作。最后将列表加入最后要输出的列表中。
一、Queue是什么?
队列(Queue)是一种特殊的线性表,它只允许在表的前端进行删除操作,而在表的后端进行插入操作。 LinkedList类实现了Queue接口,因此我们可以把LinkedList当成Queue来使用。
- 定义一个列表
Queue queue = new LinkedList();
offer,add区别:offer()当队列已满,再加入元素时,返回false;而add()抛出unchecked异常。
poll,remove区别:remove()和poll()方法都是从队列中删除第一个元素。poll()方法在用空集合调用时只是返回null,不抛出异常.remove抛出异常。
peek,element区别:用于在队列的头部查询元素。在队列为空时,element()抛出一个异常,而peek()返回null。
二、反转功能
Collections.reverse()
java.util.Collections.reverse() method is a java.util.Collections class method. It reverses the order of elements in a list passed as an argument.
// Reverses elements of myList and returns Nothing.
// For example, if list contains {1, 2, 3, 4}, it converts
// list to {4, 3, 2, 1}
public static void reverse(List myList)
三、代码
代码如下:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
//1.List<List<Integer>> results = new LinkedList<List<Integer>>();
List<List<Integer>> results = new ArrayList<>();//1->2
Queue<TreeNode> q = new LinkedList<TreeNode>();
return zz(root,q,results);
}
private List<List<Integer>> zz(TreeNode root, Queue<TreeNode> q,List<List<Integer>> results){
if(root==null) return results;
q.offer(root);
int level = 0;
while(!q.isEmpty())
{
int length = q.size();
List<Integer> subList = new LinkedList<Integer>();
for(int i=0;i<length;i++)
{
if(q.peek().left!=null) q.offer(q.peek().left);
if(q.peek().right!= null) q.offer(q.peek().right);
subList.add(q.poll().val);
}
if(level%2==1) Collections.reverse(subList);
results.add(subList);
level++;
}
return results;
}
}
总结
参考链接
【1】https://www.runoob.com/java/data-queue.html
【2】https://www.geeksforgeeks.org/collections-reverse-java-examples/
【3】https://www.youtube.com/watch?v=NzPlgKJJZvo