编程素养部分的吹毛求疵
代码风格
不甚了解是不能更了解的意思,这个地方应该使用存疑。后期在不断优化,'在'应为'再'。googlec++编程规范,Google拼写错误
代码本地编译
粘到本例来运行存疑,应为本地本题运行存疑,应为本地
ACM二叉树
- 左孩子和右孩子的下标不太好理解。我给出证明过程:
如果父节点在第k层,第\(m,m \in [0,2^k]\)个节点,则其左孩子所在的位置必然为\(k+1\)层,第\(2*(m-1)+1\)个节点。
-
计算父节点在数组中的索引: $$ index_{father}=(\sum_{i=0}{i=k-1}2i)+m-1=2^k-1+m-1 $$
-
计算左子节点在数组的索引: $$ index_{left}=(\sum_{i=0}{i=k}2i)+2*m-1-1=2^{k+1}+2m-3 $$
-
故左孩子的下表为\(index_{left}=index_{father}\times2+1\),同理可得到右子孩子的索引关系。也可以直接在左子孩子的基础上
+1。