처음 간단한 관찰. 루트는 이므로 모든 어린이는 에서 시작합니다. 인덱스 전에 i 힙에는 i-1 버텍스가 있습니다 (인덱스 0은 꼭지점이 아닙니다!), 각각 4 개의 아이를 정확하게 가지고 있습니다. 그래서 난번째 어린이에있을 것이다 2 + 4 * (I-1) 2 + 4 * 에 I-1 예, 1의 아이들 2 + 4 * 0 = 2이다 ~ 2 + 4 * 0 + 3 = 5.
def son_(i):
return range(2+4*(i-1),2+4*i)
for i in range(1,10): print i,son_(i)
출력
1 [2, 3, 4, 5]
2 [6, 7, 8, 9]
3 [10, 11, 12, 13]
4 [14, 15, 16, 17]
5 [18, 19, 20, 21]
6 [22, 23, 24, 25]
7 [26, 27, 28, 29]
8 [30, 31, 32, 33]
9 [34, 35, 36, 37]
구멍없는 참조.
first_son (i) = 2 + 4i 및 last_son (i) = 2 + 4i + 3 = 4 (i + 1) +1이면 아버지 (n) = 층 ((n-2)/4) +1.
하자 시험 (+1 1에서 시작하는 배열을 만드는 것입니다) 그 :
def father_(n):
return (n-2)/4+1
for i in range(2,20): print i,father_(i)
출력 :
2 1
3 1
4 1
5 1
6 2
7 2
8 2
9 2
10 3
11 3
12 3
13 3
14 4
15 4
16 4
17 4
18 5
19 5
당신이 옳습니다. 나는 이것을 지금 고쳤다 고 생각한다. –