0
点赞
收藏
分享

微信扫一扫

Leetcode103. 二叉树的锯齿形层序遍历


题目传送:​​https://leetcode.cn/problems/binary-tree-zigzag-level-order-traversal/​​

运行效率

Leetcode103. 二叉树的锯齿形层序遍历_职场和发展


代码如下

public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
List<List<Integer>> result = new ArrayList<>();
// 处理边界情况
if (root == null) {
return result;
}
//层序遍历一般通过队列来实现
ArrayDeque<TreeNode> arrayDeque = new ArrayDeque<>();
arrayDeque.add(root);
// -1代表从左往右,1代表从右往左
int direction = -1;
while (arrayDeque.size() > 0) {
// 用于存储本层遍历的结果
ArrayList<Integer> list = new ArrayList<>();
// 存储下一层要遍历的节点
ArrayList<TreeNode> list1 = new ArrayList<>();
while (arrayDeque.size() > 0) {
// 弹出队列头部的元素
TreeNode poll = arrayDeque.poll();
list.add(poll.val);
// 1代表从右往左
if (direction == 1) {
if (poll.right != null) {
list1.add(poll.right);
}
if (poll.left != null) {
list1.add(poll.left);
}
} else { // 0代表从左往右
if (poll.left != null) {
list1.add(poll.left);
}
if (poll.right != null) {
list1.add(poll.right);
}
}
}
addQueue(list1,arrayDeque);
direction = -direction;
result.add(list);
}
return result;
}

public void addQueue(List<TreeNode> list,ArrayDeque<TreeNode> queue) {
for(TreeNode treeNode:list){
queue.addFirst(treeNode);
}
}


举报

相关推荐

0 条评论