结论
对于 i 结点的第一个子结点的编号 j,有
j = (i-1)*m+2
题目
有满 m 叉树按照层次从上到下,每层从左到右的顺序从1开始对全部结点编号,编号为 i 的结点的第1个子结点 j 的编号是多少
推导过程(修改于2021.08.26,已更正评论区提出的问题)
- 假设 i 在第 n 行 (n = 1,2,3,…)
- 前 n-1 行一共有 [m^(n-1)-1] / (m-1) 个结点
- 则在第 n 行,结点 i 前有 i - [m^(n-1)-1] / (m-1) - 1 个结点
- 那么第 n+1 行,i 的第1个子结点前有
{ i - [m^(n-1)-1] / (m-1) - 1 } * m 个结点 - 所以在 i 的第1个子结点前,一共有
{ i - [m^(n-1)-1] / (m-1) - 1 } * m + (m^n-1)/(m-1) 个结点,化简得,有 (i-1) * m+1 个结点 - 故 i 的第1个子结点 j = (i-1) * m+2,证明完毕
推导过程(LaTex版本)
- 假设 i i i 在第 n n n 行 ( n = 1 , 2 , 3 , … ) (n = 1,2,3,…) (n=1,2,3,…)
- 前 n n n 行一共有 m n − 1 m − 1 \frac{m^{n}-1} {m-1} m−1mn−1 个结点
- 前 n − 1 n-1 n−1 行一共有 m ( n − 1 ) − 1 m − 1 \frac {m^{(n-1)}-1} {m-1} m−1m(n−1)−1 个结点
- 则在第 n n n 行,结点 i i i 前有 i − m ( n − 1 ) − 1 m − 1 − 1 i - \frac{m^{(n-1)}-1} {m-1} - 1 i−m−1m(n−1)−1−1 个结点
- 那么第 n + 1 n+1 n+1 行, i i i 的第 1 1 1 个子结点前有 [ i − m ( n − 1 ) − 1 m − 1 − 1 ] ∗ m [i - \frac{m^{(n-1)}-1} {m-1} - 1] * m [i−m−1m(n−1)−1−1]∗m 个结点
- 所以在 i i i 的第 1 1 1 个子结点前,一共有 [ i − m ( n − 1 ) − 1 m − 1 − 1 ] ∗ m + m n − 1 m − 1 [i - \frac{m^{(n-1)}-1} {m-1} - 1] * m + \frac{m^{n}-1} {m-1} [i−m−1m(n−1)−1−1]∗m+m−1mn−1 个结点,化简得,有 ( i − 1 ) ∗ m + 1 (i-1) * m+1 (i−1)∗m+1 个结点
- 故 i i i 的第 1 1 1 个子结点 j = ( i − 1 ) ∗ m + 2 j = (i-1) * m+2 j=(i−1)∗m+2,证明完毕