设有一组初始关键字为(45,80,48,40,22,78) ,要求构造一棵二叉排序树并给出构造过程
时间: 2023-06-04 08:04:40 浏览: 786
好的,我可以向您展示构造过程。
首先,我们将第一个关键字 45 作为根节点。然后,我们将 80 插入到根节点的右子树,因为它比根节点大。此时,树的形状是:
```
45
\
80
```
接下来,我们需要将 48 插入到树中。它比根节点小,但比右子节点大,因此我们将其插入到右子节点的左子树。树的形状现在是:
```
45
\
80
/
48
```
下一个关键字是 40,比根节点小,因此我们将其插入到根节点的左子树。现在树的形状是:
```
45
/ \
40 80
/
48
```
接下来,我们将 22 插入到树中。它比根节点和左子节点都小,因此我们将其插入到左子节点的左子树。树的形状现在是:
```
45
/ \
40 80
/ /
22 48
```
最后一个关键字是 78,比根节点小但比右子节点大,因此我们将其插入到右子节点的右子树。最终的树形状如下:
```
45
/ \
40 80
/ / \
22 48 78
```
构造完成!
相关问题
设有一组关键字序列为(31,23,17,27,19,11,13,91,61,41),要求: (1)采用哈希函数: H ( key )= key mod 7。用链地址法解决冲突,试在0~6的散列地址空间对关键字序列构造哈希表。并计算出在等概率情况下查找成功的平均查找长度;(2)以该关键字序列中的各关键字为叶子构造一棵哈夫曼树,并计算出它的带权路径长度 WPL ; (3)按各关键字在该关键字序列中的顺序依次插入一棵初始为空的二叉排序树,画出插入完成后的二叉排序树,并求其在等概率的情况下查找成功的平均查找长度。
好的,以下是对应的题解:
1. 哈希表构建
采用哈希函数 $H(key) = key \ mod \ 7$,对于每个关键字,计算出其散列地址并插入哈希表中。若发生冲突,则采用链地址法解决,即在对应散列地址的链表中插入该关键字。
关键字序列为(31,23,17,27,19,11,13,91,61,41),哈希表构建的过程如下:
| 地址 | 关键字 |
| --- | --- |
| 0 | 41 |
| 1 | 31,17 |
| 2 | 23,13 |
| 3 | 27,91 |
| 4 | 19 |
| 5 | 11 |
| 6 | 61 |
在等概率情况下查找成功的平均查找长度为:
$$ASL = \frac{1}{n}\sum_{i=1}^nL_i$$
其中 $n$ 为关键字数,$L_i$ 为查找第 $i$ 个关键字时的查找长度。由于采用链地址法解决冲突,所以每个地址上的关键字出现的概率相等,即 $p_i = \frac{1}{n}$。而查找第 $i$ 个关键字时的查找长度与该关键字所在地址上的链表长度 $k_i$ 有关,即 $L_i = k_i + 1$。因此,可以得到:
$$ASL = \frac{1}{n}\sum_{i=1}^n(k_i + 1) = \frac{1}{n}\sum_{i=0}^6(k_i + 1)$$
其中 $k_i$ 表示地址 $i$ 上链表的长度。
2. 哈夫曼树构建
按照哈夫曼树构建的方法,可以得到如下哈夫曼树:
```
289
/ \
125 164
/ \ / \
53 72 82 82
/ \ / \
27 26 30 42
```
其中,每个叶子节点的权值即为对应的关键字,带权路径长度 WPL 为:
$$WPL = 27 \times 1 + 26 \times 2 + 30 \times 2 + 42 \times 2 + 53 \times 3 + 72 \times 3 + 82 \times 3 + 82 \times 3 = 707$$
3. 二叉排序树构建
按照给定的关键字序列,依次插入一棵初始为空的二叉排序树中,可以得到以下二叉排序树:
```
31
/ \
23 91
/ \ \
17 27 41
/ \
19 61
\
13
```
在等概率的情况下查找成功的平均查找长度为:
$$ASL = \frac{1}{n}\sum_{i=1}^nL_i$$
其中 $n$ 为关键字数,$L_i$ 为查找第 $i$ 个关键字时的查找长度。由于二叉排序树中各节点的结构与关键字的插入顺序有关,因此 $L_i$ 的值也与插入顺序有关,无法通过概率论的方法进行计算。在一般情况下,二叉排序树的查找成功时间复杂度为 $O(h)$,其中 $h$ 为树的高度。因此,二叉排序树的平均查找长度与树的高度有关,即:
$$ASL = O(h)$$
由于一棵 $n$ 个节点的随机构造的二叉排序树的平均高度为 $O(\log n)$,因此在等概率情况下,该二叉排序树的平均查找长度为 $O(\log n)$。
6.设一组初始记录关键字序列为(20,12,42,31,18,14,28),则根据这些记录关键字构造的二叉排序树的平均查找长度是_______________________________。
根据这些记录关键字构造的二叉排序树如下所示:
```
20
/ \
12 42
/ \ /
18 14 31
\
28
```
二叉排序树的平均查找长度与树的形态有关,一般情况下难以计算出精确值,但可以通过公式进行估算。假设有 $n$ 个节点,则平均查找长度为:
$$ASL=\frac{1}{n}\sum_{i=1}^{n}{l_i}$$
其中 $l_i$ 表示第 $i$ 个节点的查找长度。对于一棵随机构造的二叉排序树,每个节点被访问到的概率是相等的,因此可以用节点的深度作为节点的查找长度。假设节点深度为 $d_i$,则 $l_i = d_i + 1$,因为在访问到节点后还需要比较一次才能确定查找成功。因此有:
$$ASL=\frac{1}{n}\sum_{i=1}^{n}{(d_i+1)}$$
对于一组随机的数据,期望的二叉排序树的深度为 $O(\log{n})$,因此可以估算出平均查找长度的数量级。但是,由于这组数据的初始序列并不是随机的,因此无法直接使用上述结论。不过,可以通过计算这棵树的深度来估算平均查找长度的数量级。
这棵树的深度为 4,因此平均查找长度的数量级为 $O(\log{n})$。具体的数值为:
$$ASL \approx \frac{1}{7}(3+2+3+2+3+3+4) \approx 2.71$$
因此,根据这些记录关键字构造的二叉排序树的平均查找长度约为 2.71。
阅读全文
相关推荐










