假设一棵二叉排序树的关键字为单个字母,其后序遍历序列为ACDBFIJHGE,详细讲解以下问题:(1)画出该二叉排序树。(6分)(2)求在等概率下的查找成功的平均查找长度。(2分)(3)求在等概率下的查找不成功的平均查找长度

时间: 2023-08-31 22:24:44 浏览: 266
### 回答1: (1) 画出该二叉排序树如下图所示: ``` G / \ E J / / \ C H I / \ A D \ B ``` (2)在等概率下的查找成功的平均查找长度为 3.7。 查找成功的概率为每个节点的概率,即 1/9。对于任意一个节点,其深度为从根节点到该节点所经过的边数。因此,查找成功的平均查找长度为: (1/9) * (1 + 2 + 2 + 3 + 3 + 3 + 4 + 4 + 5) = 3.7 (3)在等概率下的查找不成功的平均查找长度为 4.44。 由于二叉排序树的特性,当查找不成功时,需要到达最底层的空节点才能确定查找失败。因此,查找不成功的平均查找长度为树的深度加一。树的深度为 4,因此查找不成功的平均查找长度为 4 + 1 = 4.44。 ### 回答2: (1)根据后序遍历序列ACDBFIJHGE,可以得到该二叉排序树的结构如下: G / \ E J / \ / D H I / / C F / A (2)在等概率下的查找成功的平均查找长度可以通过二叉排序树的深度来计算。深度是指从根节点到达某个叶子节点的路径长度。根据二叉排序树的结构,每个节点的深度为从根节点到达该节点的路径长度。 节点A的深度为1,节点C的深度为2,节点D的深度为3,节点E的深度为2,节点F的深度为3,节点G的深度为1,节点H的深度为2,节点I的深度为3,节点J的深度为2。 平均查找长度 = (节点A的深度 + 节点C的深度 + 节点D的深度 + 节点E的深度 + 节点F的深度 + 节点G的深度 + 节点H的深度 + 节点I的深度 + 节点J的深度) / 总节点数 总节点数为9个,所以平均查找长度 = (1 + 2 + 3 + 2 + 3 + 1 + 2 + 3 + 2) / 9 = 20 / 9 ≈ 2.22 (3)在等概率下的查找不成功的平均查找长度仍然可以通过二叉排序树的深度来计算。根据二叉排序树的结构,对于一个叶子节点来说,它的深度等于从根节点到达该节点的路径长度。 所有叶子节点的路径长度之和等于深度乘以每个深度的叶子节点数,再除以总叶子节点数。 叶子节点数为5个,其中A、C、D、F、I是叶子节点,它们的深度分别为1、2、3、3、3。 总叶子节点数为9个,所以平均查找长度 = (1*1 + 2*2 + 3*3 + 3*1 + 3*2) / 9 = (1 + 4 + 9 + 3 + 6) / 9 = 23 / 9 ≈ 2.56。 ### 回答3: (1)根据后序遍历序列以及二叉排序树的特点,可以得到根节点为E,根节点E的右子树为HGE,左子树为ACDBFIJ。继续根据子树的后序遍历序列可以得到二叉排序树的结构如下: E / \ C H /\ / \ A D G J \ F 该二叉排序树绘制出来即可。 (2)在等概率下的查找成功的平均查找长度计算公式为:ASL = log2(n+1) - (1/n) * (H(x1) + H(x2) + ... + H(xn)),其中n为节点的个数,H(x1)、H(x2)分别为查找到节点x1、x2时所经过的节点数量。 对于该二叉排序树,节点的个数n为9个,那么查找成功的平均查找长度ASL = log2(9+1) - (1/9) * (0 + 1 + 1 + 1 + 2 + 2 + 2 + 3 + 3) = log2(10) - (1/9) * 15 ≈ 2.356。 (3)在等概率下的查找不成功的平均查找长度计算公式为:ASL = log2(n+1)。 对于该二叉排序树,节点的个数n为9个,那么查找不成功的平均查找长度ASL = log2(9+1) = log2(10) ≈ 3.322。 (注意:上述计算公式中的log2(n)表示以2为底n的对数,H(x)表示节点x所在的深度)

相关推荐

最新推荐

recommend-type

jquery插件使用方法大全

Jquery是继prototype之后又一个优秀的Javascrīpt框架。它是轻量级的js库(压缩后只有21k) ,它兼容CSS3,还兼容各种浏览器 (IE 6.0+, FF 1.5+, Safari 2.0+, Opera 9.0+)。jQuery使用户能更方便地处理...
recommend-type

net学习笔记及其他代码应用

请画出遍历所有文件名(FileName)的流程图(请使用递归算法)。 答: void FindFile( Directory d ) { FileOrFolders = d.GetFileOrFolders(); foreach( FileOrFolder fof in FileOrFolders ) { if( fof is ...
recommend-type

pre_o_1csdn63m9a1bs0e1rr51niuu33e.a

pre_o_1csdn63m9a1bs0e1rr51niuu33e.a
recommend-type

matlab建立计算力学课程的笔记和文件.zip

matlab建立计算力学课程的笔记和文件.zip
recommend-type

FT-Prog-v3.12.38.643-FTD USB 工作模式设定及eprom读写

FT_Prog_v3.12.38.643--FTD USB 工作模式设定及eprom读写
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

2. 通过python绘制y=e-xsin(2πx)图像

可以使用matplotlib库来绘制这个函数的图像。以下是一段示例代码: ```python import numpy as np import matplotlib.pyplot as plt def func(x): return np.exp(-x) * np.sin(2 * np.pi * x) x = np.linspace(0, 5, 500) y = func(x) plt.plot(x, y) plt.xlabel('x') plt.ylabel('y') plt.title('y = e^{-x} sin(2πx)') plt.show() ``` 运行这段
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。