【二叉树】满k叉树的编号问题

背景

一棵高为 h h h的满 k k k叉树具有如下性质:根节点所在层次为 0 0 0;第 h h h层上的结点都是叶子结点;其余各层上每个结点都有 k k k棵非空子树。现在按照层次自顶向下,同一层自左向右,顺序从 1 1 1开始对全部结点进行编号。

问题

首先得到一些常规的结论,方便后面使用:第 l l l层有 k l k^l kl个结点;前 l l l层有 ∑ i = 0 l k l = k l + 1 − 1 k − 1 \sum\limits_{i=0}^{l}{k^l} = \frac{k^{l+1}-1}{k-1} i=0lkl=k1kl+11个结点。

现在设一结点编号为 i i i,试推导:
(1)第 m m m个孩子的编号;
(2)双亲结点的编号。

不妨假设该结点在第 l l l ( m > 0 ) (m>0) (m>0),则前 l − 1 l-1 l1层有 N l − 1 N_{l-1} Nl1个结点。因此第 l l l层中,在结点 i i i左边的结点数为 a = i − N l − 1 − 1 a = i-N_{l-1}-1 a=iNl11个。

因此从结点 i i i到结点 i i i的第一个孩子,需要经过 a k ak ak个结点 i i i兄弟的孩子。可知第 m m m个孩子的编号 i ( m ) = N l + a k + m = ( i − 1 ) k + m + 1 , i(m)=N_l+ak+m=(i-1)k+m+1, i(m)=Nl+ak+m=(i1)k+m+1,其中 N l N_l Nl是前 l l l层的结点总数。

要求双亲结点的编号,理论上反解上面的表达式即可。涉及到除法,可以这样考虑。设 n n n为结点 i p i_p ip的子女,则 ( i p − 1 ) k + 2 ≤ n ≤ i p k + 1. (i_p-1)k +2 \le n \le i_pk+1. (ip1)k+2nipk+1. 因此对于结点 i i i我们可以得到其双亲结点编号 i p = ⌊ i − 2 k ⌋ + 1. i_p = \lfloor \frac{i-2}{k} \rfloor + 1. ip=ki2+1.

你可能感兴趣的:(数据结构)