数据结构第六章习题

我会慢慢更新一些重要的习题

1.一棵深度为H的满k叉树有如下性质:第H层上的结点都是叶子结点,其余各层上每个结点都有k棵非空子树。如果按层次顺序从1开始对全部结点编号,问:
(1)各层的结点数目是多少?
(2)编号为p的结点的父结点(若存在)的编号是多少?
(3)编号为p的结点的第i个儿子结点(若存在)的编号是多少?
(4)编号为p的结点有右兄弟的条件是什么?其右兄弟的编号是多少?

答:

(1)第i层的结点数为k^{i-1},总的结点数为\sum_{i=1}^{n} k^{i-1},根据等比数列的求和公式\frac{a_{1}(1-q^{n})}{1-q} or \frac{a_{1}-a_{n}q}{1-q},得\frac{1-k^{n}}{1-k}

(2)编号为1的结点是根结点,根节点没有父结点,编号为p(p!=1)的父结点是:

如果最左孩子编号为p,最右孩子编号为p+k-1,最右孩子减去根结点再除以k,就能得到最右孩子所在的组,该组即父结点的编号,int_down(\frac{p+k-2}{k})。

下面给出示意图:

(3)叶子结点没有孩子结点,对于其他结点,结点p的第i个孩子为(p-1)*k+1+i,因为p之前的每个结点都会产生k个孩子,加上根结点,再加上i就是其孩子的编号。

(4)当(p-1)%k!=0时,结点p有右兄弟,编号为p+1。

2.已知一棵深度为k的树中有n1个度为1的结点,n2个度为2的结点,…,nk个度为k的结点,问该树中有多少个叶子结点?

答:

设度为0的结点数(即叶子结点)为n_{0},则

结点关系:n=n_{0}+n_{1}+n_{2}+...+n_{k}

分支关系:n-1=n_{1}+2n_{2}+...+kn_{k}

联立求出叶子结点数为\sum_{i=1}^{k}(i-1)n_{i}+1

3.已知在一棵含有n个结点的树中,只有度为k的分支结点和度为0的叶子结点。试求该树含有的叶子结点的数目。

答:

结点关系:n=n_{k}+n_{0}

分支关系:n-1=kn_{k}

联立求出叶子结点数为n+\frac{1-n}{k}

4.证明:一棵满k叉树上的叶子结点数n0和非叶子结点数n1之间满足以下关系:n0=(k-1)n1+1。

答:

结点关系:n=n_{0}+n_{1}

分支关系:n-1=kn_{1}

联立可证。

5.试分别推导含有n个结点和含n0个叶子结点的完全三叉树的深度H。

答:

n个结点的情况:前H-1层的结点数为:\frac{k^{H-1}-1}{k-1},前H层的结点数为:\frac{k^{H}-1}{k-1},所以

\frac{k^{H-1}-1}{k-1}<n<=\frac{k^{H}-1}{k-1}

当k=3时,3^{H-1}-1<2n<=3^{H}-1,解出H=log_{3}(2n+1)

n0个叶子结点的情况:由题4知:n=\frac{kn_{0}-1}{k-1},故3^{H-1}-1<3n_{0}-1<=3^{H}-1,得出结果:H=log_{3}(n_{0})+1

猜你喜欢

转载自blog.csdn.net/q354636996/article/details/89394595