关于完全K叉树父子结点编号求解问题

frankzch 2003-07-31 12:03:04
是一个简单的问题啊,但是希望能有人给一个明确的思路,我不需要答案
就是完全K叉树知道某结点编号求其父结点或子结点的编号
具体的求解过程?
...全文
450 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
frankzch 2003-07-31
  • 打赏
  • 举报
回复
好好,多谢大家!
超超的方法很直观,虽然最后的结果有点问题(子结点为i*k+1),但是你的方法给我很大的启发,相信在以后的学习中我解决此类问题会更快,而且无论根结点编号是0还是1你这个方法都适用!
(顾问团)寻开心的方法很严谨,也让我从数学的角度深刻的理解了这个问题,谢谢!!
不过只能给大家不多的分数,不好意思了,以后还会问你们,以后我会散更多的分!
寻开心 2003-07-31
  • 打赏
  • 举报
回复 1
这个问题的核心就是计算第N层第M个节点的自身编号,以及由这个编号反算在树上的位置
我们知道
第0层有1个节点
第一层K个节点
第二层K^2个节点
第三层K^3个节点
……

因此第N层,第M个节点的编号就是:
. K^N-1
. 1+K + K^2 + ... + K^(N-1) + M = ------------ + M
. K-1

在第N层的所有节点的编号都是满足
. K^N-1 K^(N+1)-1
. 编号处于 ------------ 和 -------- 之间
. K-1 K-1

因此定位一个已知的编号的时候,只要找到这个N,使得
. K^N-1 K^(N+1)-1
. ------------ <= M < --------
. K-1 K-1
就可以了。

知道了这个关系,由此推导编号的父子节点关系就很容易了。

从N层M个节点的编号公式
. K^N-1
. 1+K + K^2 + ... + K^(N-1) + M = ------------ + M
. K-1
知道,用K乘以这个编号,得到的是
. K^(N+1)-K K^(N+1)-1
.K*(1+K + K^2 + ... + K^(N-1) + M) = ------------ + MK = ---------- -1 + MK
. K-1 k-1

我们来看这个数值和N层M节点的子节点的关系。
N层的全部节点就是
. K^(N+1)-1
. 1+K + K^2 + ... + K^(N-1) + K^N = ------------. K-1

第M个节点的前面M-1个节点各自有K个子节点,因此它的第一个子节点的编号就是

我们来看这个数值和N层M节点的子节点的关系。
N层的全部节点就是
. K^(N+1)-1
. 1+K + K^2 + ... + K^(N-1) + K^N +(m-1)*K+1 = ------------- + MK -(k-1)
. K-1
对比它和前面的公式就可以得到两者之间的关系

反向计算也类似。
mmmcd 2003-07-31
  • 打赏
  • 举报
回复
画个图看看:
0
1 2 3 ... k
k+1 k+2 ... k+k 2k+1 ... 3k 3k+1 ... k*k+1 ... k*k+k
(k+1)k+1...

第i点其父:[(i-1)/k]
第i点其子:i*(k+1)+1,i*(k+1)+2, ... ,i*(k+1)+k
frankzch 2003-07-31
  • 打赏
  • 举报
回复
没人知道吗?还是嫌这个问题太简单了??????
谁要是答的好我另开贴给分,绝对不少于100
实在是搞不清楚啊

33,007

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧