题目:Binary Tree Zigzag Level Order Traversal
难度:medium
问题描述:
Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to right, then right to left for the next level and alternate between).
For example:
Given binary tree [3,9,20,null,null,15,7]
,
3 / \ 9 20 / \ 15 7
return its zigzag level order traversal as:
[ [3], [20,9], [15,7] ]
解题思路:同样是层级遍历二叉树,使用BFS即可。遇到反序时就使用栈将数倒过来~
代码如下:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
Stack<TreeNode> stack=new Stack<>();
public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
List<List<Integer>> res=new ArrayList<>();
Queue<TreeNode> queue=new LinkedList<>();
if(root==null){
return res;
}
queue.add(root);
bfs(res,queue,true);
return res;
}
private void bfs(List<List<Integer>> res,Queue<TreeNode> queue,boolean flag){
int len=queue.size();
if(len==0){
return;
}
TreeNode t;
List<Integer> list=new ArrayList<>();
if(flag){
for(int i=0;i<len;i++){
t=queue.poll();
list.add(t.val);
if(t.left!=null){
queue.add(t.left);
}
if(t.right!=null){
queue.add(t.right);
}
}
res.add(list);
bfs(res,queue,false);
}else{
for(int i=0;i<len;i++){
t=queue.poll();
stack.add(t);
if(t.left!=null){
queue.add(t.left);
}
if(t.right!=null){
queue.add(t.right);
}
}
while(!stack.isEmpty()){
list.add(stack.pop().val);
}
res.add(list);
bfs(res,queue,true);
}
}
}