给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。
例如: 给定二叉树 [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回锯齿形层次遍历如下:
[
[3],
[20,9],
[15,7]
]
Java代码:
class Solution {
public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
List<List<Integer>> res = new LinkedList<>();
if(null != root){
List<Stack<TreeNode>> col = new LinkedList<>();
Stack<TreeNode> s0 = new Stack<>();
s0.push(root);
col.add(s0);
for(int i = 0; i < col.size(); i++){
List<Integer> list = new LinkedList<>();
Stack<TreeNode> s = col.get(i);
while(!s.isEmpty()){
TreeNode t = s.pop();
list.add(t.val);
if(null != t.left || null != t.right){
if(col.size()-1 == i){
Stack<TreeNode> si = new Stack<>();
col.add(si);
}
if(0 == i%2){
if(null != t.left)
col.get(i+1).push(t.left);
if(null != t.right)
col.get(i+1).push(t.right);
} else {
if(null != t.right)
col.get(i+1).push(t.right);
if(null != t.left)
col.get(i+1).push(t.left);
}
}
}
res.add(list);
}
}
return res;
}
}