Skip to content

Commit 2f98cc5

Browse files
committed
modify code
1 parent afd3139 commit 2f98cc5

6 files changed

+40
-20
lines changed

src/class036/Code01_LevelOrderTraversal.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public static class TreeNode {
1717
public TreeNode right;
1818
}
1919

20-
// 提交时把方法名改为levelOrder,此方法为普通bfs,不推荐
20+
// 提交时把方法名改为levelOrder,此方法为普通bfs,此题不推荐
2121
public static List<List<Integer>> levelOrder1(TreeNode root) {
2222
List<List<Integer>> ans = new ArrayList<>();
2323
if (root != null) {
@@ -52,13 +52,13 @@ public static List<List<Integer>> levelOrder1(TreeNode root) {
5252

5353
public static int l, r;
5454

55-
// 提交时把方法名改为levelOrder,此方法为每次处理一层的优化bfs,推荐
55+
// 提交时把方法名改为levelOrder,此方法为每次处理一层的优化bfs,此题推荐
5656
public static List<List<Integer>> levelOrder2(TreeNode root) {
5757
List<List<Integer>> ans = new ArrayList<>();
5858
if (root != null) {
5959
l = r = 0;
6060
queue[r++] = root;
61-
while (l < r) {
61+
while (l < r) { // 队列里还有东西
6262
int size = r - l;
6363
ArrayList<Integer> list = new ArrayList<Integer>();
6464
for (int i = 0; i < size; i++) {

src/class036/Code02_ZigzagLevelOrderTraversal.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,16 @@ public static List<List<Integer>> zigzagLevelOrder(TreeNode root) {
2828
if (root != null) {
2929
l = r = 0;
3030
queue[r++] = root;
31-
boolean reverse = false;
31+
// false 代表从左往右
32+
// true 代表从右往左
33+
boolean reverse = false;
3234
while (l < r) {
3335
int size = r - l;
3436
ArrayList<Integer> list = new ArrayList<Integer>();
37+
// reverse == false, 左 -> 右, l....r-1, 收集size个
38+
// reverse == true, 右 -> 左, r-1....l, 收集size个
39+
// 左 -> 右, i = i + 1
40+
// 右 -> 左, i = i - 1
3541
for (int i = reverse ? r - 1 : l, j = reverse ? -1 : 1, k = 0; k < size; i += j, k++) {
3642
TreeNode cur = queue[i];
3743
list.add(cur.val);

src/class036/Code04_DepthOfBinaryTree.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,11 @@ public static int maxDepth(TreeNode root) {
1818
// 测试链接 : https://leetcode.cn/problems/minimum-depth-of-binary-tree/
1919
public int minDepth(TreeNode root) {
2020
if (root == null) {
21+
// 当前的树是空树
2122
return 0;
2223
}
2324
if (root.left == null && root.right == null) {
25+
// 当前root是叶节点
2426
return 1;
2527
}
2628
int ldeep = Integer.MAX_VALUE;

src/class036/Code05_PreorderSerializeAndDeserialize.java

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -32,36 +32,37 @@ public class Codec {
3232

3333
public String serialize(TreeNode root) {
3434
StringBuilder builder = new StringBuilder();
35-
serialize(root, builder);
35+
f(root, builder);
3636
return builder.toString();
3737
}
3838

39-
void serialize(TreeNode root, StringBuilder builder) {
39+
void f(TreeNode root, StringBuilder builder) {
4040
if (root == null) {
4141
builder.append("#,");
4242
} else {
4343
builder.append(root.val + ",");
44-
serialize(root.left, builder);
45-
serialize(root.right, builder);
44+
f(root.left, builder);
45+
f(root.right, builder);
4646
}
4747
}
4848

4949
public TreeNode deserialize(String data) {
5050
String[] vals = data.split(",");
5151
cnt = 0;
52-
return deserialize(vals);
52+
return g(vals);
5353
}
5454

55+
// 当前数组消费到哪了
5556
public static int cnt;
5657

57-
TreeNode deserialize(String[] vals) {
58+
TreeNode g(String[] vals) {
5859
String cur = vals[cnt++];
5960
if (cur.equals("#")) {
6061
return null;
6162
} else {
6263
TreeNode head = new TreeNode(Integer.valueOf(cur));
63-
head.left = deserialize(vals);
64-
head.right = deserialize(vals);
64+
head.left = g(vals);
65+
head.right = g(vals);
6566
return head;
6667
}
6768
}

src/class036/Code07_PreorderInorderBuildBinaryTree.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,12 @@ public static TreeNode f(int[] pre, int l1, int r1, int[] in, int l2, int r2, Ha
3737
if (l1 == r1) {
3838
return head;
3939
}
40-
int find = map.get(pre[l1]);
41-
head.left = f(pre, l1 + 1, l1 + find - l2, in, l2, find - 1, map);
42-
head.right = f(pre, l1 + find - l2 + 1, r1, in, find + 1, r2, map);
40+
int k = map.get(pre[l1]);
41+
// pre : l1(........)[.......r1]
42+
// in : (l2......)k[........r2]
43+
// (...)是左树对应,[...]是右树的对应
44+
head.left = f(pre, l1 + 1, l1 + k - l2, in, l2, k - 1, map);
45+
head.right = f(pre, l1 + k - l2 + 1, r1, in, k + 1, r2, map);
4346
return head;
4447
}
4548

src/class036/Code09_CountCompleteTreeNodes.java

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,17 +19,25 @@ public static int countNodes(TreeNode head) {
1919
return f(head, 1, mostLeft(head, 1));
2020
}
2121

22-
public static int f(TreeNode cur, int Level, int h) {
23-
if (Level == h) {
22+
// cur : 当前来到的节点
23+
// level : 当前来到的节点在第几层
24+
// h : 整棵树的高度,不是cur这棵子树的高度
25+
// 求 : cur这棵子树上有多少节点
26+
public static int f(TreeNode cur, int level, int h) {
27+
if (level == h) {
2428
return 1;
2529
}
26-
if (mostLeft(cur.right, Level + 1) == h) {
27-
return (1 << (h - Level)) + f(cur.right, Level + 1, h);
30+
if (mostLeft(cur.right, level + 1) == h) {
31+
// cur右树上的最左节点,扎到了最深层
32+
return (1 << (h - level)) + f(cur.right, level + 1, h);
2833
} else {
29-
return (1 << (h - Level - 1)) + f(cur.left, Level + 1, h);
34+
// cur右树上的最左节点,没扎到最深层
35+
return (1 << (h - level - 1)) + f(cur.left, level + 1, h);
3036
}
3137
}
3238

39+
// 当前节点是cur,并且它在level层
40+
// 返回从cur开始不停往左,能扎到几层
3341
public static int mostLeft(TreeNode cur, int level) {
3442
while (cur != null) {
3543
level++;

0 commit comments

Comments
 (0)