(BST) 举例存储结构typedef struct node { KeyType key; InfoType


失败:n+1次比较
优缺点
优点:简单,对存储结构、Key之间的关系均无特殊要求 缺点:效率低,当n较大时不宜用
5
§ 9.2.2 二分(折半)查找
适用范围:顺序表、有序 基本思想(分治法)
(1)设R[low..high] 是当前查找区间,首先确定该区间的中点 位置:mid= (low&1..5]
R[1..2]
3
R[2..2]
6 < =
R[7..11]
内部结点 外部结点
>
R[7..8]
9
R[4..5]
R[10..11]
Φ
1
Φ
4
7
R[5..5] Φ
R[8..8] Φ
10
R[11..11]
-1
2 3-4
Φ Φ Φ
5
Φ
6-7
Φ
8
Φ
9-10
Φ
11
Φ
1-2
2-3 4-5 5-6
17
void InsertBST( BSTree *T, KeyType key ) { //*T是根 BSTNode *f, *p=*T; //p指向根结点 while( p ) { //当树非空时,查找插入位置 if ( p->key==key ) return; //树中已有key,不允许重复插入 f=p;// f和p为父子关系, 循环不变量:*parent为*p的双亲 p=( key < p->key ) ? p->lchild; p->rchild; } //注意:树为空时,无须查找 p = (BSTNode *) malloc(sizeof(BSTNode)); p->key=key; p->lchild=p->rchild=NULL; //生成新结点 if ( *T ==NULL ) * T=p; //原树为空,新结点为根 else //原树非空, 新结点作为*f的左或右孩子插入 if ( key < f->key ) f->lchild=p; else f->rchild=p; } //时间为O(h)
存储结构
将R[1..n]均分成b块,前b-1块中结点数为s=⌈n/b⌉ ,最后一块中的结 点数可能小于s,引入索引表标记块。
关键字状态
分块有序:块间有序,块内不一定有序; 例子:n=18,b=3,s=6
最大关键字 22 48 86 起始地址 1 7 13
22 12 13 8
9
20 33 42 44 38 24 48 60 58 74 49 86 53
1
§9.1 基本概念 效率:与存储结构、文件状态(有序、无序)有关 平均查找长度 (ASL) ,即平均的比较次数,作为衡 量查找效率的标准:
ASL i 1 P i Ci
n
Pi:查找第i个结点的概率 Ci:查找第i个结点的比较次数 设Pi=1/n, 1≤i≤n 约定:typedef int KeyType;
} // endwhile
return 0; //当前查找区间为空时失败 }
7
查找过程 判定(比较)树:分析查找过程的二叉树,形态只与结点数相关, 与输入实例的取值无关(为什么?)。例如n=11的形态如下图所示。 1 2 3 4 5 6 7 8 9 10 11 (05,13,19,21,37,56,64,75,80, 88, 92),找21成功,找85失败。
7-8 8-9 10-11 11-
8
时间分析
比较1次:查找R[6] 比较2次:查找R[3]、R{9] 比较3次:查找R[1]、R[4]、R[7]、R[10] 比较4次:查找R[2]、R[5]、R[8]、R[11]
R[1..11] R[1..5]
6 < =
R[7..11]
R[1..2]
§ 9.3.1 二叉查找树(BST)
1.查找(续) 时间 若成功,则走了一条从根到待查节点的路径
5 3 2 4 7 9
若失败,则走了一条从根到叶子的路径?(不一定)
上界:O(h) 分析:与树高相关
①最坏情况:单支树,ASL=(n+1)/2,与顺序查找相同
②最好情况:ASL≈lgn,形态与折半查找的判定树相似 ③平均情况:假定n个keys所形成的n!种排列是等概率的, 则可证明由这n!个序列产生的n!棵BST(其中有的形态相同) 的平均高度为O(lgn),故查找时间仍为O(lgn) 16
§ 9.2.2 二分(折半)查找
算法: int BinSearch( SeqList R, KeyType K ) { int mid, low=1, high=n; while ( low < high ) { //当前查找区间R[low..high]非空 mid= (low+high)/2; //整除 if ( R[mid].key==K )return mid; //成功返回位置mid if ( K<R[mid].key ) //两个子问题求解其中的一个 high=mid-1; //在左区间中查找 else low=mid+1;//在右区间中查找
1 n 1 h n 1 k 1 ASLbs Pi Ci Ci k 2 lg( n 1) 1 lg( n 1) 1 n i 1 n k 1 n i 1
n
最坏时间:查找失败,不超过树高 ⌈lg(n+1)⌉
在链表上可做折半查找吗?
10
§ 9.2.3 分块查找(索引顺序查找)
2
§ 9.2 线性表的查找
对象:用线性表作为表的组织形式。 分类:静态查找、内部查找 方式:顺序查找、二分查找、分块查找 #define n 100//
§9.2.1 顺序查找
基本思想 从表的一端开始,顺序扫描线性表,依次将扫描到的结点的 Key与给定值K进行比较,若当前扫描到结点 Key= K,则查 找成功返回;若扫描完整个表后,仍未找到,则查找失败。 适用范围:顺序表、链表 算法:
3
>
R[7..8]
9
R[4..5]
R[10..11]
1
Φ
R[2..2]
4
Φ
7
R[5..5] Φ
R[8..8] Φ
10
R[11..11]
-1
Φ
2 3-4
Φ Φ
5
Φ
6-7
Φ
8
Φ
9-10 11
Φ
Φ
9
1-2
2-3 4-5 5-6 7-8 8-9 10-11 11-
§ 9.2.2 二分(折半)查找
时间分析
Ch.9 查找
§9.1 基本概念
查找和排序是两个重要的运算 对象:表、文件等。其中每个结点(记录)由多个数据项 构成,假设每个结点有1个能唯一标识该结点的key。 定义:给定1个值K,在含有n个结点的表中找出关键字等于 K的结点,若找到(查找成功),则返回该结点信息或它在 表中的位置;否则(查找失败),返回相关指示信息。 分类: 查找过程中是否修改表?动态查找、静态查找 查找过程是否均在内存中进行?内部查找、外部查找
}
return T;// 返回根指针
}
19
2、BST的插入和生成
举例
输入实例 {10, 18, 3, 8, 12, 2, 7, 3}
10 10
总结:查找过程走了一条从判定树的根到被查结点的路径。 成功:终止于一个内部结点,所需的Key比较次数恰为该结点在 树中的层数;
失败:终止于一个外部结点,所需的Key比较次数为该路径上内 部结点总数。(层数-1)
平均查找长度(ASL): 设n=2h-1, 则树高h=lg(n+1) //不计外部结点的满二叉树 第k层上结点数为2k-1,找该层上每个结点的比较次数为k,在等 概率假设下:
① 若它的左子树非空,则左子树上所有结点的 keys 均小于根 的key
② 若它的右子树非空,则右子树上所有结点的 keys 均大于根 的key
③左右子树又都是二叉查找树
Note:性质1或2中,可以将“﹤” 改为“≤”;或“﹥ ”改 为“≥”
BST性质
二叉查找树的中序序列是一个递增有序序列
13
§ 9.3.1 二叉查找树(BST)
11
§ 9.2.3 分块查找(索引顺序查找)
查找过程(两步查找)
索引表查找:确定块。n较大时用折半查找,n较小时用顺序查找。 块内查找:只能顺序查找。
性能分析
以折半查找确定块
ASL= ASLbs+ASLss=lg(b+1)-1+(s+1)/2≈lg(n/s+1)+s/2
以顺序查找确定块 ASL= ASLss+ASLss=(b+1)/2+(s+1)/2=(s2+2s+n)/(2s)
18
2、BST的插入和生成
生成
算法: 从空树开始,每输入一个数据就调用一次插入算法。 BSTree CreateBST( void ) { BSTree T=NULL; //初始时T为空 KeyType key; scanf( “%d”, &key ); while( key ) { //假设key=0表示输入结束 InsertBST ( &T, key ) ; //将key插入树T中 scanf( “%d”, &key );// 读入下一个关键字
(2)将待查的K值与R[mid]比较,
① K=R[mid].key:查找成功,返回位置mid
② K<R[mid].key:则左子表R[low..mid-1]是新的查找区间 ③ K>R[mid],key:则右子表R[mid+1..high]是新的查找区间
初始的查找区间是 R[1..n],每次查找比较 K和中间点元素,若 查找成功则返回;否则当前查找区间缩小一半,直至当前查找 区间为空时查找失败。 6
合集下载

阿里最新面试题(含部分答案解析)

阿里最新面试题(含部分答案解析)

•
return self.cache[key]
•
•
def put(self, key, value):
•
"""
•
:type key: int
•
:type value: int
•
:rtype: void
•
"""
•
if not key in self.cache:
•
if len(self.keys) == self.capacity:
•
m.erase(k);
•
}
•
}
•}
• 1.1.5 关于 epoll 和 select 的区别,哪些说法是正确的?(多选)
A. epoll 和 select 都是 I/O 多路复用的技术,都可以实现同时监听多个 I/O 事件的 状态。
B. epoll 相比 select 效率更高,主要是基于其操作系统支持的 I/O 事件通知机制,而 select 是基于轮询机制。
public int kthSmallest(TreeNode root, int k) { return kthSmallestHelper(root, k).val;
}
private ResultType kthSmallestHelper(TreeNode root, int k) { if (root == null) { return new ResultType(false, 0); }
•
self.elim_key()
•
self.cache[key] = value
•
self.visit_key(key)

CC++语法知识:typedefstruct用法详解

CC++语法知识:typedefstruct用法详解

CC++语法知识:typedefstruct⽤法详解第⼀篇:typedef struct与struct的区别1. 基本解释typedef为C语⾔的关键字,作⽤是为⼀种数据类型定义⼀个新名字。

这⾥的数据类型包括内部数据类型(int,char等)和⾃定义的数据类型(struct等)。

在编程中使⽤typedef⽬的⼀般有两个,⼀个是给变量⼀个易记且意义明确的新名字,另⼀个是简化⼀些⽐较复杂的类型声明。

⾄于typedef有什么微妙之处,请你接着看下⾯对⼏个问题的具体阐述。

2. typedef & 结构的问题当⽤下⾯的代码定义⼀个结构时,编译器报了⼀个错误,为什么呢?莫⾮C语⾔不允许在结构中包含指向它⾃⼰的指针吗?请你先猜想⼀下,然后看下⽂说明:typedef struct tagNode{ char *pItem; pNode pNext;} *pNode;答案与分析:1、typedef的最简单使⽤typedef long byte_4;给已知数据类型long起个新名字,叫byte_4。

2、 typedef与结构结合使⽤typedef struct tagMyStruct{ int iNum; long lLength;} MyStruct;这语句实际上完成两个操作:1) 定义⼀个新的结构类型struct tagMyStruct{ int iNum; long lLength;};分析:tagMyStruct称为“tag”,即“标签”,实际上是⼀个临时名字,struct 关键字和tagMyStruct⼀起,构成了这个结构类型,不论是否有typedef,这个结构都存在。

我们可以⽤struct tagMyStruct varName来定义变量,但要注意,使⽤tagMyStruct varName来定义变量是不对的,因为struct 和tagMyStruct 合在⼀起才能表⽰⼀个结构类型。

2) typedef为这个新的结构起了⼀个名字,叫MyStruct。

数据结构复习题1

数据结构复习题1
}
数据结构复习题2
一、选择题(30分)
1.设一维数组中有n个数组元素,则读取第i个数组元素的平均时间复杂度为()。
(A) O(n)(B) O(nlog2n)(C) O(1)(D) O(n2)
2.设一棵二叉树的深度为k,则该二叉树中最多有()个结点。
(A) 2k-1(B) 2k(C) 2k-1(D) 2k-1
5.设哈夫曼树中共有n个结点,则该哈夫曼树中有___0_____个度数为1的结点。
6.设有向图G中有n个顶点e条有向边,所有的顶点入度数之和为d,则e和d的关系为_________。
7.__________遍历二叉排序树中的结点可以得到一个递增的关键字序列(填先序、中序或后序)。
8.设查找表中有100个元素,如果用二分法查找方法查找数据元素X,则最多需要比较________次就可以断定数据元素X是否在查找表中。
typedef struct node {datatype data; struct node *lchild,*rchild;} bitree;
bitree *q[20]; int r=0,f=0,flag=0;
void preorder(bitree *bt, char x)
{
if (bt!=0 && flag==0)
int hashsqsearch(struct record hashtable[ ],int k)
{
int i,j; j=i=k % p;
while (hashtable[j].key!=k&&hashtable[j].flag!=0){j=(____) %m; if (i==j) return(-1);}
(C)判别栈元素的类型(D)对栈不作任何判别

数据结构试题及答案(免费)

数据结构试题及答案(免费)

数据结构试卷(十一)一、选择题(30分)1.设某无向图有n个顶点,则该无向图的邻接表中有()个表头结点。

(A) 2n (B) n (C) n/2 (D) n(n-1)2.设无向图G中有n个顶点,则该无向图的最小生成树上有()条边。

(A) n (B) n-1 (C) 2n (D) 2n-13.设一组初始记录关键字序列为(60,80,55,40,42,85),则以第一个关键字45为基准而得到的一趟快速排序结果是()。

(A) 40,42,60,55,80,85 (B) 42,45,55,60,85,80(C) 42,40,55,60,80,85 (D) 42,40,60,85,55,804.()二叉排序树可以得到一个从小到大的有序序列。

(A) 先序遍历(B) 中序遍历(C) 后序遍历(D) 层次遍历5.设按照从上到下、从左到右的顺序从1开始对完全二叉树进行顺序编号,则编号为i结点的左孩子结点的编号为()。

(A) 2i+1 (B) 2i (C) i/2 (D) 2i-16.程序段s=i=0;do {i=i+1;s=s+i;}while(i<=n);的时间复杂度为()。

(A) O(n) (B) O(nlog2n) (C) O(n2) (D) O(n3/2)7.设带有头结点的单向循环链表的头指针变量为head,则其判空条件是()。

(A) head==0 (B) head->next==0(C) head->next==head (D) head!=08.设某棵二叉树的高度为10,则该二叉树上叶子结点最多有()。

(A) 20 (B) 256 (C) 512 (D) 10249.设一组初始记录关键字序列为(13,18,24,35,47,50,62,83,90,115,134),则利用二分法查找关键字90需要比较的关键字个数为()。

(A) 1 (B) 2 (C) 3 (D) 410.设指针变量top指向当前链式栈的栈顶,则删除栈顶元素的操作序列为()。

2020年考研计算机数据结构模拟试题及答案(三)

2020年考研计算机数据结构模拟试题及答案(三)

2020年考研计算机数据结构模拟试题及答案(三)一、选择题(30分)1. 1. 字符串的长度是指( )。

(A) 串中不同字符的个数 (B) 串中不同字母的个数(C) 串中所含字符的个数 (D) 串中不同数字的个数2. 2. 建立一个长度为n的有序单链表的时间复杂度为( )(A) O(n) (B) O(1) (C) O(n2) (D) O(log2n)3. 3. 两个字符串相等的充要条件是( )。

(A) 两个字符串的长度相等 (B) 两个字符串中对应位置上的字符相等(C) 同时具备(A)和(B)两个条件 (D) 以上答案都不对4. 4. 设某散列表的长度为100,散列函数H(k)=k % P,则P通常情况下选择( )。

(A) 99 (B) 97 (C) 91 (D) 935. 5. 在二叉排序树中插入一个关键字值的平均时间复杂度为( )。

(A) O(n) (B) O(1og2n) (C) O(nlog2n) (D) O(n2)6. 6. 设一个顺序有序表A[1:14]中有14个元素,则采用二分法查找元素A[4]的过程中比较元素的顺序为( )。

(A) A[1],A[2],A[3],A[4] (B) A[1],A[14],A[7],A[4](C) A[7],A[3],A[5],A[4] (D) A[7],A[5] ,A[3],A[4]7. 7. 设一棵完全二叉树中有65个结点,则该完全二叉树的深度为( )。

(A) 8 (B) 7 (C) 6 (D) 58. 8. 设一棵三叉树中有2个度数为1的结点,2个度数为2的结点,2个度数为3的结点,则该三叉链权中有( )个度数为0的结点。

(A) 5 (B) 6 (C) 7 (D) 89. 9. 设无向图G中的边的集合E={(a,b),(a,e),(a,c),(b,e),(e,d),(d,f),(f,c)},则从顶点a出发实行深度优先遍历能够得到的一种顶点序列为( )。

大学计算机《数据结构》试卷及答案(八)

大学计算机《数据结构》试卷及答案(八)

大学计算机《数据结构》试卷及答案一、选择题(30分)1.设一维数组中有n个数组元素,则读取第i个数组元素的平均时间复杂度为()。

(A) O(n) (B) O(nlog2n) (C) O(1) (D) O(n2)2.设一棵二叉树的深度为k,则该二叉树中最多有()个结点。

(A) 2k-1 (B) 2k(C) 2k-1(D) 2k-13.设某无向图中有n个顶点e条边,则该无向图中所有顶点的入度之和为()。

(A) n (B) e (C) 2n (D) 2e4.在二叉排序树中插入一个结点的时间复杂度为()。

(A) O(1) (B) O(n) (C) O(log2n) (D) O(n2)5.设某有向图的邻接表中有n个表头结点和m个表结点,则该图中有()条有向边。

(A) n (B) n-1 (C) m (D) m-16.设一组初始记录关键字序列为(345,253,674,924,627),则用基数排序需要进行()趟的分配和回收才能使得初始关键字序列变成有序序列。

(A) 3 (B) 4 (C) 5 (D) 87.设用链表作为栈的存储结构则退栈操作()。

(A) 必须判别栈是否为满(B) 必须判别栈是否为空(C) 判别栈元素的类型(D) 对栈不作任何判别8.下列四种排序中()的空间复杂度最大。

(A) 快速排序(B) 冒泡排序(C) 希尔排序(D) 堆9.设某二叉树中度数为0的结点数为N0,度数为1的结点数为N l,度数为2的结点数为N2,则下列等式成立的是()。

(A) N0=N1+1 (B) N0=N l+N2(C) N0=N2+1 (D) N0=2N1+l10.设有序顺序表中有n个数据元素,则利用二分查找法查找数据元素X的最多比较次数不超过()。

(A) log2n+1 (B) log2n-1 (C) log2n (D) log2(n+1)二、填空题(42分)1.设有n个无序的记录关键字,则直接插入排序的时间复杂度为________,快速排序的平均时间复杂度为_________。

c语言typedef语句结构

c语言typedef语句结构【原创版】目录1.C 语言 typedef 的作用2.typedef 语句的基本结构3.举例说明 typedef 的应用正文【1】C 语言 typedef 的作用在 C 语言编程中,typedef 是一种声明类型的方法,它可以为现有类型定义一个新的名字,使得程序的设计更加简洁和清晰。

通过使用typedef,我们可以创建用户自定义类型,从而简化代码的编写和阅读。

【2】typedef 语句的基本结构typedef 语句的基本结构如下:```typedef 原类型名新类型名;```其中,原类型名为已经存在的数据类型,如 int、float 等;新类型名是我们为原类型定义的新名字。

需要注意的是,typedef 声明的新类型并不是一个独立的类型,而是对原类型的一个别名。

【3】举例说明 typedef 的应用下面我们通过一个例子来说明 typedef 的应用:假设我们有一个程序需要频繁使用整数类型,但我们希望为整数类型定义一个新的名字,如`int32`。

通过 typedef,我们可以实现这个需求。

具体代码如下:```c#include <stdio.h>typedef int int32;int main() {int32 a = 100;int32 b = 200;printf("%d", a + b);return 0;}```在这个例子中,我们使用 typedef 为整数类型定义了一个新的名字`int32`,然后在程序中使用这个新名字。

这样做的好处是,我们可以在程序中使用更加直观和清晰的类型名,而不需要记住整数类型的具体名称。

typedef在c语言中的用法

typedef在c语言中的用法嘿,小伙伴们,今天咱们来聊聊C语言里头的一个神奇小工具——typedef,它啊,就像是编程世界里的魔法师,能让复杂的事情变得简单又有趣。

别看它名字听起来高深莫测,其实用起来,嘿,那叫一个顺手!想象一下,你正在厨房里忙碌,准备做一顿大餐。

锅碗瓢盆一大堆,每种工具都有它特定的用途,对吧?但有时候,为了方便,你可能会给某个常用的工具起个昵称,比如那把大铲子,你干脆叫它“翻云覆雨手”,听起来就带劲儿!这就是typedef干的活儿,它给复杂的数据类型起个简单易记的名字,让你的代码读起来像诗一样流畅。

首先,咱们得明白,为啥需要typedef呢?想象一下,如果你在写代码时,经常需要用到一种特别复杂的数据类型,比如一个指向函数的指针,这个函数又返回另一个指向另一个函数的指针,哎呀妈呀,这说起来都绕口。

每次写这么一串长长的类型声明,是不是感觉头都大了?这时候,typedef就像是个贴心的助手,它能帮你把这一大串复杂的东西简化成一个简短的、容易记住的名字。

比如,你可以这么写:```ctypedef int* IntPtr;```看,多简单!以后每当你想用指向int的指针时,直接写IntPtr就行了,再也不用担心记不住那长长的类型声明了。

再比如,咱们定义一个结构体,用来存储学生的信息:```cstruct Student {char name[50];int age;float score;};```每次使用这个结构体时,都得写`struct Student`,挺麻烦的。

有了typedef,咱们可以这么做:```ctypedef struct Student {char name[50];int age;float score;} Student;```注意看,这里有个小技巧,我们把`typedef`和`struct`放在了一起,这样定义之后,直接就可以用`Student`来声明变量了,省去了`struct`这个前缀,代码看起来更清爽。

c语言结构体定义typedef

c语言结构体定义typedefC语言结构体定义typedefC语言是一种非常流行的编程语言,广泛应用于嵌入式系统、操作系统以及各种应用程序的开发中。

在C语言中,结构体是一种非常重要的数据类型,它允许我们将不同的数据类型组合在一起,形成一个新的数据类型。

为了方便使用结构体,C语言提供了typedef关键字,使我们能够为结构体定义一个新的名称。

那么,下面就让我们一步一步地探讨typedef在C语言结构体定义中的作用和使用方法。

第一步:了解结构体的基本概念在开始使用typedef关键字定义结构体之前,我们首先需要了解结构体的基本概念。

结构体是由多个不同数据类型的变量组成的复合数据类型。

它允许我们将不同类型的数据组合在一起,形成一个整体,方便我们对这些数据进行统一管理和操作。

结构体的定义由关键字"struct"开始,后面跟着结构体的名称,再加上一对大括号,用于定义结构体的成员变量。

例如,我们可以定义一个包含学生信息的结构体如下:cstruct Student {int id;char name[20];int age;};上面的代码定义了一个名为Student的结构体,它包含了一个整型变量id、一个字符数组name和一个整型变量age。

第二步:使用typedef为结构体定义新的名称在上面的代码中,我们可以看到结构体的定义必须以struct关键字开头。

当我们想要使用这个结构体类型时,需要每次都写上struct关键字,这样显得比较冗长。

为了简化代码,C语言提供了typedef关键字,使我们能够为结构体定义一个新的名称。

使用typedef的语法如下:ctypedef struct {int id;char name[20];int age;} Student;在上面的代码中,我们使用typedef关键字为结构体定义了一个新的名为Student的名称。

这样,我们就可以直接使用Student作为结构体类型,而无需每次都写上struct关键字了。

第八章查找——精选推荐

查找一.选择题1.若查找每个元素的概率相等,则在长度为n 的顺序表上查找到表中任一元素的平均查找长度为_____________。

A. nB. n+1C. (n-1)/2D. (n+1)/2分析:本题主要考查顺序表的平均查长度的计算,在等概率下,ASLsucc=nP1+(n-1)P2+……+2Pn-1 +Pn=[n+(n-1)+ ……+1]/n = (n+1)/2,其中:Pi 为查找第i 个元素的概率。

所以答案为D。

2.折半查找的时间复杂度_____________。

A.O(n*n)B.O(n)C. O(nlog2n)D. O(log2n)分析:本题考查折半查找的基本思想和对应的判定树。

因为对n 个结点的线性表进行折半查找,对应的判定树的深度是 log2n +1,折半查找的过程就是走了一条从判定树的根到末端结点的路径,所以答案为D。

3.采用分块查找时,数据的组织方式为_____________。

A. 把数据分成若干块,每块内数据有序B. 把数据分成若干块,块内数据不必有序,但块间必须有序,每块内最大(或最小)的数据组成索引表C. 把数据分成若干块,每块内数据有序,每块内最大(或最小)的数据组成索引表D. 把数据分成若干块,每块(除最后一块外)中的数据个数相等分析:本题主要考查分块查找的数据组织方式特点。

在分块查找时,要求块间有序,块内或者有序或者无序。

这样,在查找记录所在的块时,可以采用折半查找。

所以答案为B。

4.二叉排序树的查找效率与二叉排序树的(1)有关,当(2)时,查找效率最低,其查找长度为n。

(1) A.高度B.结点的个数C.形状D.结点的位置(2) A.结点太多B.完全二叉树C.呈单叉树D.结点的结构太复杂分析:本题主要考查二叉排序树的查找效率与二叉排序树形存在一定的关系。

当二叉排序树的前 log2n 层是满二叉树时,其查找效率最高,其查找长度最大为 log2n +1;当二叉排序树呈单叉树时,其查找效率最低,其查找长度最大为n,此时相当于顺序查找。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档