题目
给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。
例如:
给定二叉树 [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回锯齿形层次遍历如下:
[
[3],
[20,9],
[15,7]
]
思路
- 让每个点都带有层数
- 每一个元素添加的时候判断它所在的层数,如果偶数行,添加在List的后面,如果是奇数行,添加在List的前面
代码
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
List<List<Integer>> sol = new ArrayList<>();
travel(root, sol, 0);
return sol;
}
private void travel(TreeNode curr,List<List<Integer>> sol,int level) {
if(curr==null)
return;
if(sol.size()<=level){
List<Integer> newLevel=new LinkedList<>();
sol.add(newLevel);
}
List<Integer> collection=sol.get(level);
if(level%2==0)
collection.add(curr.val);
else
collection.add(0,curr.val); //将元素插入到index为0的地方
travel(curr.left,sol,level+1);
travel(curr.right,sol,level+1);
}
}