/**
* 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>> zigzagLevelOrder(TreeNode root) {
List<List<Integer>> ans = new LinkedList<List<Integer>>();//list中再装一个list转成一个list
if(root == null){
return ans;
}
Queue<TreeNode> nodeQueue = new LinkedList<TreeNode>();//单端队列FIFO用于广度优先遍历
nodeQueue.offer(root);//在队列中添加头元素
boolean isOrderLeft = true;//左到右为true
while(!nodeQueue.isEmpty()){
Deque<Integer> levelList = new LinkedList<Integer>();//构建双端队列储存每一层的节点
int size = nodeQueue.size();
for(int i=0; i<size; ++i){
TreeNode curNode = nodeQueue.poll();//取队列头
if(isOrderLeft){
levelList.offerLast(curNode.val);
}
else{
levelList.offerFirst(curNode.val);
}
//为遍历下一层做准备
if(curNode.left != null){
nodeQueue.offer(curNode.left);
}
if(curNode.right != null){
nodeQueue.offer(curNode.right);
}
}
ans.add(new LinkedList<Integer>(levelList));//每遍历完一层则将这层的结果加入ans
isOrderLeft = !isOrderLeft;
}
return ans;
}
}
103. 二叉树的锯齿形层序遍历「双端队列」&广度优先遍历
最新推荐文章于 2022-06-13 19:47:25 发布