Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 15 additions & 1 deletion problems/前序/ACM模式如何构建二叉树.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,21 @@

![](https://code-thinking-1253855093.file.myqcloud.com/pics/20210914223147.png)

那么此时大家是不是应该知道了,数组如何转化成 二叉树了。**如果父节点的数组下标是i,那么它的左孩子下标就是i * 2 + 1,右孩子下标就是 i * 2 + 2**。
那么此时大家是不是应该知道了,数组如何转化成 二叉树了。**如果父节点的数组下标是i,那么它的左孩子下标就是i * 2 + 1,右孩子下标就是 i * 2 + 2**。计算过程为:

如果父节点在第$k$层,第$m,m \in [0,2^k]$个节点,则其左孩子所在的位置必然为$k+1$层,第$2*(m-1)+1$个节点。

- 计算父节点在数组中的索引:
$$
index_{father}=(\sum_{i=0}^{i=k-1}2^i)+m-1=2^k-1+m-1
$$

- 计算左子节点在数组的索引:
$$
index_{left}=(\sum_{i=0}^{i=k}2^i)+2*m-1-1=2^{k+1}+2m-3
$$

- 故左孩子的下表为$index_{left}=index_{father}\times2+1$,同理可得到右子孩子的索引关系。也可以直接在左子孩子的基础上`+1`。

那么这里又有同学疑惑了,这些我都懂了,但我还是不知道 应该 怎么构造。

Expand Down
6 changes: 3 additions & 3 deletions problems/前序/代码风格.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@

最近看了很多录友在[leetcode-master](https://mp.weixin.qq.com/s/wZRTrA9Rbvgq1yEkSw4vfQ)上提交的代码,发现很多录友的代码其实并不规范,这一点平时在交流群和知识星球里也能看出来。

很多录友对代码规范应该不甚了解,代码看起来并不舒服。
很多录友对代码规范应该了解得不多,代码看起来并不舒服。

所以呢,我给大家讲一讲代码规范,我主要以C++代码为例。

Expand All @@ -27,7 +27,7 @@

现在一些小公司,甚至大公司里的某些技术团队也不注重代码规范,赶进度撸出功能就完事,这种情况就要分两方面看:

* 第一种情况:这个项目在业务上具有巨大潜力,需要抢占市场,只要先站住市场就能赚到钱,每年年终好几十万,那项目前期还关心啥代码风格,赶进度把功能撸出来,赚钱就完事了,例如12年的微信,15年的王者荣耀。这些项目都是后期在不断优化的
* 第一种情况:这个项目在业务上具有巨大潜力,需要抢占市场,只要先站住市场就能赚到钱,每年年终好几十万,那项目前期还关心啥代码风格,赶进度把功能撸出来,赚钱就完事了,例如12年的微信,15年的王者荣耀。这些项目都是后期再不断优化的

* 第二种情况:这个项目没赚到钱,半死不活的,代码还没有设计也没有规范,这样对技术人员的伤害就非常大了。

Expand All @@ -39,7 +39,7 @@

这里我简单说一说规范问题。

**权威的C++规范以Google为主**,我给大家下载了一份中文版本,在公众号「代码随想录」后台回复:googlec++编程规范,就可以领取。
**权威的C++规范以Google为主**,我给大家下载了一份中文版本,在公众号「代码随想录」后台回复:googlec++编程规范,就可以领取。(涉及到微信后台的回复,没更改)

**具体的规范要以自己团队风格为主**,融入团队才是最重要的。

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,11 @@

然后录友就问了:如何打日志呢?

其实在力扣上打日志也挺方便的,我一般调试就是直接在力扣上打日志,偶尔需要把代码粘到本例来运行添加日志debug一下
其实在力扣上打日志也挺方便的,我一般调试就是直接在力扣上打日志,偶尔需要把代码粘到本地来运行添加日志debug一下

在力扣上直接打日志,这个就不用讲,C++的话想打啥直接cout啥就可以了。

我来说一说力扣代码如何在本题运行
我来说一说力扣代码如何在本地运行

毕竟我们天天用力扣刷题,也应该知道力扣上的代码如何在本地编译运行。

Expand Down
31 changes: 31 additions & 0 deletions problems/前序/编程素养部分的吹毛求疵.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
## 代码风格

- `不甚了解`是不能更了解的意思,这个地方应该使用存疑。
- `后期在不断优化`,'在'应为'再'。
- `googlec++编程规范`,Google拼写错误

## 代码本地编译

- `粘到本例来运行`存疑,应为本地
- `本题运行`存疑,应为本地

## ACM二叉树

- 左孩子和右孩子的下标不太好理解。我给出证明过程:

如果父节点在第$k$层,第$m,m \in [0,2^k]$个节点,则其左孩子所在的位置必然为$k+1$层,第$2*(m-1)+1$个节点。

- 计算父节点在数组中的索引:
$$
index_{father}=(\sum_{i=0}^{i=k-1}2^i)+m-1=2^k-1+m-1
$$

- 计算左子节点在数组的索引:
$$
index_{left}=(\sum_{i=0}^{i=k}2^i)+2*m-1-1=2^{k+1}+2m-3
$$

- 故左孩子的下表为$index_{left}=index_{father}\times2+1$,同理可得到右子孩子的索引关系。也可以直接在左子孩子的基础上`+1`。