二叉树的锯齿形层次遍历
public class Solution {
public List<List<Integer>> data = new ArrayList<List<Integer>>();
/**
* @param root: A Tree
* @return: A list of lists of integer include the zigzag level order traversal * of its nodes values.
*/
public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
// write your code here
if(root == null){
return data;
}
Queue<TreeNode> queue = new LinkedList<TreeNode>();
queue.offer(root);
int level = 1;
while(!queue.isEmpty()){
int size = queue.size();
List<Integer> list = new ArrayList<Integer>();
for(int i = 0; i < size; i++){
TreeNode node = queue.poll();
list.add(node.val);
if(node.left != null){
queue.offer(node.left);
}
if(node.right != null){
queue.offer(node.right);
}
}
if(level % 2 != 0){
data.add(list);
}else{
Collections.reverse(list);
data.add(list);
}
level++;
}
return data;
}
}
解题思路:
解题思路:队列(先进先出)
将每层的节点插入到队列中, 然后遍历队列,再将下一层级的节点插入到队列中, 直到最后
如图中二叉树
先将根节点放入队列中如下图
然后遍历队列,循环取出队头元素,再将队元元素的左右节点放入到队列中,如下图
如此循环直到二叉树最深层级
通过一个level字段进行判断list是否进行反转。奇数不反转,偶数反转。