分析题目:要求是层序遍历,并且每层的层序遍历的顺序是不一样的,是左右交替遍历的,
1.这里我想到的是从上向下遍历的时候携带一个辅助数的奇偶性用来标识当前这层是左到右遍历还是右到左遍历。我定的是如果辅助数是奇数就从左到右遍历。偶数则从右到左。
2.然后我用的是递归,先遍历左子节点再遍历右子节点所以正常情况得到的集合中元素是左到右排序的,如果通过辅助数知道这层要右到左排序我们就可以将元素插入到头部这样集合获取的元素就是从右到左的排序了(这里为了方便从集合的头部加入数据,采用的是链表LinkedList)
class Solution {
List<List<Integer>> resList = new ArrayList<>();
public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
res(root,0);
return resList;
}
public void res(TreeNode node,int temp){
if(node==null){
return;
}
//防止重复创建list,每层一个list
if(resList.size()<=temp){
List<Integer> list = new LinkedList<>();
resList.add(list);
}
List<Integer> list=resList.get(temp);
//如果是偶数就加入到list的尾部(左到右排序)
if(temp%2==0){
list.add(node.val);
}
//否则加入到尾部(右到左排序)
else{
list.add(0,node.val);
}
//从左到右开始遍历
res(node.left,temp+1);
res(node.right,temp+1);
}
}