Skip to content

Commit dd2722d

Browse files
committed
103.二叉树的锯齿形层序遍历
1 parent 1867dd7 commit dd2722d

File tree

3 files changed

+59
-5
lines changed

3 files changed

+59
-5
lines changed

leetcode_Java/DoneTitle.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
94. 二叉树的中序遍历
3434
101. 对称二叉树
3535
102. 二叉树的层序遍历
36+
103. 二叉树的锯齿形层序遍历
3637
104. 二叉树的最大深度
3738
105. 从前序与中序遍历序列构造二叉树
3839
114. 二叉树展开为链表

leetcode_Java/Solution0102.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,11 @@ public List<List<Integer>> levelOrder(TreeNode root) {
3131
if (root == null) {
3232
return list;
3333
}
34-
List<Integer> sonList = new ArrayList<>();
3534
Queue<TreeNode> queue = new LinkedList<>();
3635
queue.add(root);
37-
int count;
3836
while (!queue.isEmpty()) {
39-
count = queue.size();
37+
int count = queue.size();
38+
List<Integer> sonList = new ArrayList<>();
4039
while (count > 0) {
4140
root = queue.remove();
4241
sonList.add(root.val);
@@ -49,7 +48,6 @@ public List<List<Integer>> levelOrder(TreeNode root) {
4948
count--;
5049
}
5150
list.add(sonList);
52-
sonList = new ArrayList<>();
5351
}
5452
return list;
5553
}
@@ -106,7 +104,7 @@ public List<List<Integer>> levelOrder(TreeNode root) {
106104
* 局部变量:子列表存放每层节点值
107105
* 2、辅助标记:整型变量标记 层的深度 对应 子列表的索引
108106
* 3、递归逻辑:
109-
* 1)前序遍历,深度优先搜索,每个节点都会遍历到,每层节点最终都是从左到后按序访问
107+
* 1)前序遍历,深度优先搜索,每个节点都会遍历到,每层节点最终都是从左到右按序访问
110108
* 2)记录节点所在层的深度,每到新的一层就创建一个新的子列表,层的深度对应子列表的索引,节点值层序存放
111109
* */
112110
class Solution {

leetcode_Java/Solution0103.java

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
// 103. 二叉树的锯齿形层序遍历
2+
3+
4+
/**
5+
* Definition for a binary tree node.
6+
* public class TreeNode {
7+
* int val;
8+
* TreeNode left;
9+
* TreeNode right;
10+
* TreeNode() {}
11+
* TreeNode(int val) { this.val = val; }
12+
* TreeNode(int val, TreeNode left, TreeNode right) {
13+
* this.val = val;
14+
* this.left = left;
15+
* this.right = right;
16+
* }
17+
* }
18+
*/
19+
20+
21+
/*
22+
102.二叉树的层序遍历,加上是否反转标记,奇数层不变,偶数层反转子数组
23+
*/
24+
class Solution {
25+
public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
26+
List<List<Integer>> list = new ArrayList<>();
27+
if (root == null) {
28+
return list;
29+
}
30+
Queue<TreeNode> queue = new LinkedList<>();
31+
queue.add(root);
32+
boolean flag = false;
33+
while (!queue.isEmpty()) {
34+
int count = queue.size();
35+
List<Integer> sonList = new ArrayList<>();
36+
while (count > 0) {
37+
TreeNode node = queue.remove();
38+
sonList.add(node.val);
39+
if (node.left != null) {
40+
queue.add(node.left);
41+
}
42+
if (node.right != null) {
43+
queue.add(node.right);
44+
}
45+
count--;
46+
}
47+
if (flag) {
48+
Collections.reverse(sonList);
49+
}
50+
list.add(sonList);
51+
flag = !flag;
52+
}
53+
return list;
54+
}
55+
}

0 commit comments

Comments
 (0)