题目:给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。
例如:
给定二叉树 [3,9,20,null,null,15,7],
3
/
9 20
/
15 7
返回锯齿形层次遍历如下:
[
[3],
[20,9],
[15,7]
]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/binary-tree-zigzag-level-order-traversal
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class Solution {
public List<List<Integer>> zigzagLevelOrder(TreeNode root)
{
if(root==null){
//在空树情况下,直接返回空List
List<List<Integer>>lists =new ArrayList<>();
return lists;
}
help(root,0);
return list;
}
List<List<Integer>>list =new ArrayList<>();//创建list存储遍历结果
private void help(TreeNode root, int lev){
if(root==null){
return ; //节点为空时返回
}
if(list.size()-1<lev){
//判断当前层数对应的list是否存在,如果不存在,则新建一个list1加入list中
List<Integer>list1 = new ArrayList();
list.add(list1);
}
if(lev%2==0){
//偶数层,直接按中根遍历,从左到右将节点值加入对应层数的list的尾部
help(root.left,lev+1);
list.get(lev).add(root.val);
help(root.right,lev+1);
}else{
//奇数层,中根遍历,但我们将本次节点的值插入至list的头部,得到倒序的遍历结果,即从右至左
help(root.left,lev+1);
list.get(lev).add(0,root.val);
help(root.right,lev+1);
}
}
}