1、题目描述
给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。
例如:
给定二叉树 [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回锯齿形层次遍历如下:
[
[3],
[20,9],
[15,7]
]
2、解题
使用二叉树的层次遍历即可
public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
List<List<Integer>> res = new ArrayList<List<Integer>>() ;
if(root == null) {
return res;
}
LinkedList<TreeNode> queue = new LinkedList<TreeNode>();
queue.push(root);
//true:从右往左, false:从左往右
boolean flag = false;
while(!queue.isEmpty()) {
int levelSize = queue.size();
List<Integer> list = new ArrayList<Integer>(levelSize);
while(levelSize-- > 0) {
TreeNode curNode = queue.poll();
list.add(curNode.val);
if(curNode.left != null) {
queue.offer(curNode.left);
}
if(curNode.right != null) {
queue.offer(curNode.right);
}
}
if(flag && list.size()>1) {
//需要翻转数组
Collections.reverse(list);
}
flag = !flag;
res.add(list);
}
return res;
}