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;}