1、来源:binary-tree-zigzag-level-order-traversal牛客网
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,#,#,15,7},
3
/ \
9 20
/ \
15 7
return its zigzag level order traversal as:
[
[3],
[20,9],
[15,7]
]
2、思路:广度优先遍历,加上一个标记来判断是奇偶行,从而达到“zigzag”的效果;
3、代码:
链接:https://www.nowcoder.com/questionTerminal/47e1687126fa461e8a3aff8632aa5559
来源:牛客网
package leetcode;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
public class ZigzagLevelOrder {
ArrayList<ArrayList<Integer>> res =new ArrayList<ArrayList<Integer>>();
/**
* bfs,用isOrder来控制顺序还是逆序
*/
public ArrayList<ArrayList<Integer>> zigzagLevelOrder(TreeNode root) {
if(root == null)
return res;
Queue<TreeNode> q =new LinkedList<TreeNode>();
q.add(root);
boolean isOrder = true;
while(!q.isEmpty()){
int size =q.size();
ArrayList<Integer> list =new ArrayList<Integer>();
while(size-- > 0){
TreeNode cur = q.poll();
if(isOrder)
list.add(cur.val);
else
list.add(0,cur.val);
if(cur.left != null)
q.add(cur.left);
if(cur.right != null)
q.add(cur.right);
}
res.add(list);
isOrder = !isOrder;
}
return res;
}
}