题目:
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] ]
confused what "{1,#,2,3}"
means? > read more on how binary tree is serialized on OJ.
OJ's Binary Tree Serialization:
The serialization of a binary tree follows a level order traversal, where '#' signifies a path terminator where no node exists below.
Here's an example:
1 / \ 2 3 / 4 \ 5The above binary tree is serialized as
"{1,2,3,#,#,4,#,#,5}"
.
就是给定一棵二叉树,然后按照之字形来输出,其实就是层次遍历,只不过遇到偶数层,就换一下顺序即可,换汤不换药的题,和我之前的那两篇博客的方法基本一样。
public class Solution
{
public List<List<Integer>> zigzagLevelOrder(TreeNode root)
{
List<List<Integer>> list = new ArrayList<List<Integer>>();
LinkedList<TreeNode> node = new LinkedList<TreeNode>();
if(root == null)
return list;
else
{
node.add(root);
int length = node.size();
int i = 1;
while(!node.isEmpty())
{
List<Integer> nodes = new ArrayList<Integer>();
while(length-- > 0)
{
int value = node.peek().val;
TreeNode n = node.peek();
node.poll();
nodes.add(value);
if(n.left != null)
node.add(n.left);
if(n.right != null)
node.add(n.right);
}
length = node.size();
if(i % 2 == 0)
Collections.reverse(nodes);
list.add(nodes);
i++;
}
return list;
}
}
}