请问一个基础的满k叉树的问题
一个深度为h的满k叉树有如下性质:第h层上的结点都是叶子结点,其余各层上每个结点都有k棵非空子树。如果按层次顺序(同层自左至右)从未有过开始对全部结点编号,问:
1. 编号为i的结点的双亲结点(若存在)的编号是多少?
答案是:编号为i的结点的双亲结点的编号是:|_ (i-2)/k _|+1(不大于(i-2)/k的最大整数。也就是(i-2)与k整除的结果.以下/表示整除。
哪位知道是如何推导的?谢谢?
顺便告诉如何给回复我贴的人加分,这里有很多热心的人,但我不知如何给他们加分!
[解决办法]
假设节点i在c层。
那么,c层以上的节点有k^(c-1)-1个(运算符'^'表示乘方),于是,第c层在i前面的节点有i-(k^(c-2)-1)-1个。
那么,第c-1层上,在节点i的双亲节点之前,有|_(i-k^(c-2)-2)/k_|个节点。
而,节点i的双亲所在的第c-1层以上有k^(c-2)-1个节点,因此,第c-1层开始的节点的编号是k^(c-2)。
由上面知道:节点i的双亲节点之前有|_(i-k^(c-2)-2)/k_|个节点。
于是:i的双亲的编号是:k^(c-2)+|_(i-k^(c-1)-2)/k_|+1
化简一下,
k^(c-2)+|_(i-k^(c-1)-2)/k_|+1
=|_(k^(c-1)+i-k^(c-1)-2)_|+1
=|_(i-2)/k_|+1