本题是王道数据结构上的一道关于树的应用题,答案的解释给的比较简略,作补充说明,供大家参考。
以下是王道树上的解答:
1、由于满m叉树的性质,每一个非叶结点都有m个子树,因此每往下一层,上一层的结点都会有m个子结点,例如三叉树,第一层有1=3^0个,第二层有1*3=3=3^1个,第三层有1*3*3=9=3^2个,依次类推第n层有3^n-1个结点。
2、由于根节点的编号是1。而根结点必然有m个孩子,那么根节点(第一个节点)的m个孩子的编号是2到m+1,同样的,第二个节点也有m个孩子,那么第而个节点的m个孩子的编号就应该从m+1开始编排,因此是m+2到2m+1。依此可得,第3个节点的m个孩子的编号是2m+2到3m+1。以此类推,第i个节点的m个孩子的编号是(i-1)*m+2到i*m+1。也就是答案中所说的结点i的第一个子女编号为j=(i-1)*m+2。剩下的按照答案推出即可。
3、由第二问已经推导过i的第一个孩子节点为(i-1)*m+2,那么第二个孩子结点的编号为(i-1)*m+2+1,那么第三个孩子结点的编号是(i-1)*m+2+1+1=(i-1)*m+3+1,因此第k个孩子结点的编号是(i-1)*m+k+1。
4、关于这一问,我们先正向推导,第一个没有右兄弟的结点是根结点,其编号为1,第二个没有右兄弟的结点是根结点的第m个孩子,其编号为m+1,第三个没有右兄弟的结点是编号为2的结点的第m个孩子,其编号为(2-1)*m+m+1=2m+1(这个公式第三问已经推导过),以此类推,第n个没有右兄弟的结点就是编号为n-1的结点的第m个孩子,即(n-1)*m+m+1=n*m+1;由此我们可以发现,没有右兄弟的结点的特征是m的倍数加一,那么如果一个结点i有右兄弟,则应满足(i-1)%m!=0。