给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。
例如: 给定二叉树 [3,9,20,null,null,15,7],
3 / \ 9 20 / \ 15 7返回锯齿形层次遍历如下:
[ [3], [20,9], [15,7] ]主要思路
用一个变量记录是在链表的头部添加还是尾部添加当一层遍历结束后往队列中添加一个 null当一层遍历结束之后 改变 变量的头部添加还是尾部添加 class Solution { public List<List<Integer>> zigzagLevelOrder(TreeNode root) { if(root==null){ return new ArrayList<List<Integer>>(); } List<List<Integer>> result = new ArrayList<List<Integer>>(); LinkedList<TreeNode> node_queue = new LinkedList<TreeNode>(); node_queue.addLast(root); node_queue.addLast(null); LinkedList<Integer> level_list = new LinkedList<Integer>(); boolean is_order_left = true; while(node_queue.size()>0){ TreeNode curr_node = node_queue.pollFirst(); if(curr_node != null){ if(is_order_left) level_list.addLast(curr_node.val); else level_list.addFirst(curr_node.val); if(curr_node.left!=null) node_queue.addLast(curr_node.left); if(curr_node.right!=null) node_queue.addLast(curr_node.right); }else{ result.add(level_list); level_list = new LinkedList<Integer>(); if(node_queue.size()>0) node_queue.addLast(null); is_order_left = !is_order_left; } } return result; } }