File tree Expand file tree Collapse file tree 4 files changed +51
-6
lines changed Expand file tree Collapse file tree 4 files changed +51
-6
lines changed Original file line number Diff line number Diff line change 45
45
46
46
![ ] ( https://code-thinking-1253855093.file.myqcloud.com/pics/20210914223147.png )
47
47
48
- 那么此时大家是不是应该知道了,数组如何转化成 二叉树了。** 如果父节点的数组下标是i,那么它的左孩子下标就是i * 2 + 1,右孩子下标就是 i * 2 + 2** 。
48
+ 那么此时大家是不是应该知道了,数组如何转化成 二叉树了。** 如果父节点的数组下标是i,那么它的左孩子下标就是i * 2 + 1,右孩子下标就是 i * 2 + 2** 。计算过程为:
49
+
50
+ 如果父节点在第$k$层,第$m,m \in [ 0,2^k] $个节点,则其左孩子所在的位置必然为$k+1$层,第$2* (m-1)+1$个节点。
51
+
52
+ - 计算父节点在数组中的索引:
53
+ $$
54
+ index_{father}=(\sum_{i=0}^{i=k-1}2^i)+m-1=2^k-1+m-1
55
+ $$
56
+
57
+ - 计算左子节点在数组的索引:
58
+ $$
59
+ index_{left}=(\sum_{i=0}^{i=k}2^i)+2*m-1-1=2^{k+1}+2m-3
60
+ $$
61
+
62
+ - 故左孩子的下表为$index_ {left}=index_ {father}\times2+1$,同理可得到右子孩子的索引关系。也可以直接在左子孩子的基础上` +1 ` 。
49
63
50
64
那么这里又有同学疑惑了,这些我都懂了,但我还是不知道 应该 怎么构造。
51
65
Original file line number Diff line number Diff line change 13
13
14
14
最近看了很多录友在[ leetcode-master] ( https://mp.weixin.qq.com/s/wZRTrA9Rbvgq1yEkSw4vfQ ) 上提交的代码,发现很多录友的代码其实并不规范,这一点平时在交流群和知识星球里也能看出来。
15
15
16
- 很多录友对代码规范应该不甚了解 ,代码看起来并不舒服。
16
+ 很多录友对代码规范应该了解得不多 ,代码看起来并不舒服。
17
17
18
18
所以呢,我给大家讲一讲代码规范,我主要以C++代码为例。
19
19
27
27
28
28
现在一些小公司,甚至大公司里的某些技术团队也不注重代码规范,赶进度撸出功能就完事,这种情况就要分两方面看:
29
29
30
- * 第一种情况:这个项目在业务上具有巨大潜力,需要抢占市场,只要先站住市场就能赚到钱,每年年终好几十万,那项目前期还关心啥代码风格,赶进度把功能撸出来,赚钱就完事了,例如12年的微信,15年的王者荣耀。这些项目都是后期在不断优化的 。
30
+ * 第一种情况:这个项目在业务上具有巨大潜力,需要抢占市场,只要先站住市场就能赚到钱,每年年终好几十万,那项目前期还关心啥代码风格,赶进度把功能撸出来,赚钱就完事了,例如12年的微信,15年的王者荣耀。这些项目都是后期再不断优化的 。
31
31
32
32
* 第二种情况:这个项目没赚到钱,半死不活的,代码还没有设计也没有规范,这样对技术人员的伤害就非常大了。
33
33
39
39
40
40
这里我简单说一说规范问题。
41
41
42
- ** 权威的C++规范以Google为主** ,我给大家下载了一份中文版本,在公众号「代码随想录」后台回复:googlec++编程规范,就可以领取。
42
+ ** 权威的C++规范以Google为主** ,我给大家下载了一份中文版本,在公众号「代码随想录」后台回复:googlec++编程规范,就可以领取。(涉及到微信后台的回复,没更改)
43
43
44
44
** 具体的规范要以自己团队风格为主** ,融入团队才是最重要的。
45
45
Original file line number Diff line number Diff line change 13
13
14
14
然后录友就问了:如何打日志呢?
15
15
16
- 其实在力扣上打日志也挺方便的,我一般调试就是直接在力扣上打日志,偶尔需要把代码粘到本例来运行添加日志debug一下 。
16
+ 其实在力扣上打日志也挺方便的,我一般调试就是直接在力扣上打日志,偶尔需要把代码粘到本地来运行添加日志debug一下 。
17
17
18
18
在力扣上直接打日志,这个就不用讲,C++的话想打啥直接cout啥就可以了。
19
19
20
- 我来说一说力扣代码如何在本题运行 。
20
+ 我来说一说力扣代码如何在本地运行 。
21
21
22
22
毕竟我们天天用力扣刷题,也应该知道力扣上的代码如何在本地编译运行。
23
23
Original file line number Diff line number Diff line change
1
+ ## 代码风格
2
+
3
+ - ` 不甚了解 ` 是不能更了解的意思,这个地方应该使用存疑。
4
+ - ` 后期在不断优化 ` ,'在'应为'再'。
5
+ - ` googlec++编程规范 ` ,Google拼写错误
6
+
7
+ ## 代码本地编译
8
+
9
+ - ` 粘到本例来运行 ` 存疑,应为本地
10
+ - ` 本题运行 ` 存疑,应为本地
11
+
12
+ ## ACM二叉树
13
+
14
+ - 左孩子和右孩子的下标不太好理解。我给出证明过程:
15
+
16
+ 如果父节点在第$k$层,第$m,m \in [ 0,2^k] $个节点,则其左孩子所在的位置必然为$k+1$层,第$2* (m-1)+1$个节点。
17
+
18
+ - 计算父节点在数组中的索引:
19
+ $$
20
+ index_{father}=(\sum_{i=0}^{i=k-1}2^i)+m-1=2^k-1+m-1
21
+ $$
22
+
23
+ - 计算左子节点在数组的索引:
24
+ $$
25
+ index_{left}=(\sum_{i=0}^{i=k}2^i)+2*m-1-1=2^{k+1}+2m-3
26
+ $$
27
+
28
+ - 故左孩子的下表为$index_ {left}=index_ {father}\times2+1$,同理可得到右子孩子的索引关系。也可以直接在左子孩子的基础上` +1 ` 。
29
+
30
+
31
+
You can’t perform that action at this time.
0 commit comments