File tree Expand file tree Collapse file tree 3 files changed +59
-5
lines changed Expand file tree Collapse file tree 3 files changed +59
-5
lines changed Original file line number Diff line number Diff line change 33
33
94. 二叉树的中序遍历
34
34
101. 对称二叉树
35
35
102. 二叉树的层序遍历
36
+ 103. 二叉树的锯齿形层序遍历
36
37
104. 二叉树的最大深度
37
38
105. 从前序与中序遍历序列构造二叉树
38
39
114. 二叉树展开为链表
Original file line number Diff line number Diff line change @@ -31,12 +31,11 @@ public List<List<Integer>> levelOrder(TreeNode root) {
31
31
if (root == null ) {
32
32
return list ;
33
33
}
34
- List <Integer > sonList = new ArrayList <>();
35
34
Queue <TreeNode > queue = new LinkedList <>();
36
35
queue .add (root );
37
- int count ;
38
36
while (!queue .isEmpty ()) {
39
- count = queue .size ();
37
+ int count = queue .size ();
38
+ List <Integer > sonList = new ArrayList <>();
40
39
while (count > 0 ) {
41
40
root = queue .remove ();
42
41
sonList .add (root .val );
@@ -49,7 +48,6 @@ public List<List<Integer>> levelOrder(TreeNode root) {
49
48
count --;
50
49
}
51
50
list .add (sonList );
52
- sonList = new ArrayList <>();
53
51
}
54
52
return list ;
55
53
}
@@ -106,7 +104,7 @@ public List<List<Integer>> levelOrder(TreeNode root) {
106
104
* 局部变量:子列表存放每层节点值
107
105
* 2、辅助标记:整型变量标记 层的深度 对应 子列表的索引
108
106
* 3、递归逻辑:
109
- * 1)前序遍历,深度优先搜索,每个节点都会遍历到,每层节点最终都是从左到后按序访问
107
+ * 1)前序遍历,深度优先搜索,每个节点都会遍历到,每层节点最终都是从左到右按序访问
110
108
* 2)记录节点所在层的深度,每到新的一层就创建一个新的子列表,层的深度对应子列表的索引,节点值层序存放
111
109
* */
112
110
class Solution {
Original file line number Diff line number Diff line change
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
+ }
You can’t perform that action at this time.
0 commit comments