题目:
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.
分析:
本题是树的层次遍历的一个变体,目的是希望在树层次遍历的基础上,偶数层逆序遍历。因此需要一个辅助队列进行树结点的存储,然后将每一层的结点值保存在一个ArrayList中,判断是否是偶数层,若是偶数层则将ArrayList中的元素逆序存储。
具体的代码如下:
/**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
import java.util.LinkedList;
import java.util.ArrayList;
import java.util.Collections;
public class Solution {
public ArrayList<ArrayList<Integer> > zigzagLevelOrder(TreeNode root) {
ArrayList<ArrayList<Integer> > ans = new ArrayList<ArrayList<Integer> >();
if (root == null)
return ans;
LinkedList<TreeNode> q = new LinkedList<TreeNode>();
q.add(root);
boolean flag = true;
while(!q.isEmpty()){
int len = q.size();
ArrayList<Integer> tmp = new ArrayList<Integer>();
while(len > 0){
TreeNode ln = q.poll();
if (ln.left != null){
q.add(ln.left);
}
if (ln.right != null){
q.add(ln.right);
}
tmp.add(ln.val);
len--;
}
if (flag == true){
ans.add(tmp);
flag = false;
}
else{
Collections.reverse(tmp);
ans.add(tmp);
flag = true;
}
}
return ans;
}
}
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.