1. 程式人生 > >滿k叉樹的編號問題

滿k叉樹的編號問題

背景

一棵高為hh的滿kk叉樹具有如下性質:根節點所在層次為00;第hh層上的結點都是葉子結點;其餘各層上每個結點都有kk棵非空子樹。現在按照層次自頂向下,同一層自左向右,順序從11開始對全部結點進行編號。

問題

首先得到一些常規的結論,方便後面使用:第ll層有klk^l個結點;前ll層有i=0lkl=kl+11k1\sum\limits_{i=0}^{l}{k^l} = \frac{k^{l+1}-1}{k-1}個結點。

現在設一結點編號為ii,試推導: (1)第mm個孩子的編號; (2)雙親結點的編號。

不妨假設該結點在第ll(m

>0)(m>0),則前l1l-1層有Nl1N_{l-1}個結點。因此第ll層中,在結點ii左邊的結點數為a=iNl11a = i-N_{l-1}-1個。

因此從結點ii到結點ii的第一個孩子,需要經過akak個結點ii兄弟的孩子。可知第mm個孩子的編號i(m)=Nl+ak+m=(i1)k+m+1,i(m)=N_l+ak+m=(i-1)k+m+1,其中NlN_l是前ll層的結點總數。

要求雙親結點的編號,理論上反解上面的表示式即可。涉及到除法,可以這樣考慮。設n

n為結點ipi_p的子女,則(ip1)k+2nipk+1.(i_p-1)k +2 \le n \le i_pk+1. 因此對於結點ii我們可以得到其雙親結點編號ip=i2k+1.i_p = \lfloor \frac{i-2}{k} \rfloor + 1.