概述
给定一个二叉树,返回其节点值的锯齿形层序遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/binary-tree-zigzag-level-order-traversal 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路
其实就是层次遍历,与层次遍历不同的是每一层的遍历结果,是头插还是尾插的区别
思路
class Solution {
public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
List<List<Integer>> finalList = new ArrayList<>();
boolean flag = true;
if (root == null){
return finalList;
}
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
while (!queue.isEmpty()){
LinkedList<Integer> list = new LinkedList<>();
int size = queue.size();
for (int i = 0; i < size; i++) {
TreeNode treeNode = queue.poll();
if (flag){
list.addLast(treeNode.val);
}else {
list.addFirst(treeNode.val);
}
if (treeNode.left != null){
queue.add(treeNode.left);
}
if (treeNode.right != null){
queue.add(treeNode.right);
}
}
finalList.add(list);
flag = !flag;
}
return finalList;
}
}
|