我的LeetCode代码仓:https://github.com/617076674/LeetCode
原题链接:https://leetcode-cn.com/problems/binary-tree-zigzag-level-order-traversal/description/
题目描述:
知识点:二叉树的层序遍历
思路:和LeetCode102——二叉树的层序遍历同样的思路
我们只需额外设置一个int型变量index来记录当前层数是偶数还是奇数即可。
时间复杂度是O(n)级别的,其中n为二叉树中的节点个数。由于队中的元素个数最多为(2 ^ h)个,其中h为树的高度,因此空间复杂度为O(2 ^ h)级别的。
JAVA代码:
public class Solution {
public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
List<List<Integer>> listList = new ArrayList<>();
if(root == null){
return listList;
}
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
int index = 0;
while(!queue.isEmpty()){
int qSize = queue.size();
List<Integer> list = new ArrayList<>();
for(int i = 0; i < qSize; i++){
TreeNode treeNode = queue.poll();
list.add(treeNode.val);
if(treeNode.left != null){
queue.add(treeNode.left);
}
if(treeNode.right != null){
queue.add(treeNode.right);
}
}
if(index % 2 == 1){
Collections.reverse(list);
}
listList.add(list);
index++;
}
return listList;
}
}
LeetCode解题报告: