数据结构教程李春葆课后答案第7章树和二叉树

合集下载

数据结构(李春葆)习题与解析

数据结构(李春葆)习题与解析

数据结构(李春葆)习题与解析一、绪论选择题1.数据结构是一门研究非数值计算的程序设计问题计算机的以及它们之间的和运算等的学科。

1A.数据元素B.计算方法C.逻辑存储D.数据映像2A.结构B.关系C.运算D.算法2.数据结构被形式地定义为(K,R),其中K是的有限集,R是K上的有限集。

1A.算法B.数据元素C.数据操作D.逻辑结构2A.操作B.映像C.存储D.关系3.在数据结构中,从逻辑上可以把数据结构分成。

A.动态结构和静态结构B.紧凑结构和非紧凑结构C.线性结构和非线性结构D.内部结构和外部结构4.线性结构的顺序存储结构是一种的存储结构,线性表的链式存储结构是一种的存储结构。

A.随机存取B.顺序存取C.索引存取D.散列存取5.算法分析的目的是,算法分析的两个主要方面是。

1A.找出数据结构的合理性B.研究算法中的输入和输出的关系C.分析算法的效率以求改进D.分析算法的易懂性和文档性2A.空间复杂度和时间复杂度B.正确性和简单性C.可读性和文档性D.数据复杂性和程序复杂性6.计算机算法指的是,它必须具备输入、输出和等5个特性。

1A.计算方法B.排序方法C.解决问题的有限运算序列D.调度方法2A.可执行性、可移植性和可扩充性B.可行性、确定性和有穷性C.确定性、有穷性和稳定性D.易读性、稳定性和安全性7.线性表的逻辑顺序与存储顺序总是一致的,这种说法。

A.正确B.不正确8线性表若采用链式存储结构时,要求内存中可用存储单元的地址。

A.必须连续的B.部分地址必须连续的C.一定是不续的D连续不连续都可以9.以下的叙述中,正确的是。

A.线性表的存储结构优于链式存储结构B.二维数组是其数据元素为线性表的线性表C.栈的操作方式是先进先出D.队列的操作方式是先进后出10.每种数据结构都具备三个基本运算:插入、删除和查找,这种说法。

A.正确B.不正确填空题1.数据逻辑结构包括三种类型、和,树形结构和图形结构合称为。

数据结构树和二叉树习题及答案

数据结构树和二叉树习题及答案

习题六树和二叉树一、单项选择题1.以下说法错误的是()A.树形结构的特点是一个结点可以有多个直接前趋B.线性结构中的一个结点至多只有一个直接后继C.树形结构可以表达(组织)更复杂的数据D.树(及一切树形结构)是一种”分支层次”结构E.任何只含一个结点的集合是一棵树2.下列说法中正确的是()A.任何一棵二叉树中至少有一个结点的度为 2B.任何一棵二叉树中每个结点的度都为 2C.任何一棵二叉树中的度肯定等于 2D.任何一棵二叉树中的度可以小于 23.讨论树、森林和二叉树的关系,目的是为了()A.借助二叉树上的运算方法去实现对树的一些运算B.将树、森林按二叉树的存储方式进行存储C.将树、森林转换成二叉树D.体现一种技巧,没有什么实际意义4.树最适合用来表示()A.有序数据元素 B .无序数据元素C.元素之间具有分支层次关系的数据 D .元素之间无联系的数据5.若一棵二叉树具有10个度为2的结点,5个度为1的结点,则度为0的结点个数是()A.9 B.11 C .15 D .不确定6.设森林F中有三棵树,第一,第二,第三棵树的结点个数分别为M1, M2和M3与森林F对应的二叉树根结点的右子树上的结点个数是()。

A.M1 B .M1+M2 C .M3 D .M2+M37.一棵完全二叉树上有1001个结点,其中叶子结点的个数是()A.250 B .500 C .254 D .505 E .以上答案都不对8.设给定权值总数有n 个,其哈夫曼树的结点总数为()A.不确定 B . 2n C . 2n+1 D . 2n-19.二叉树的第I层上最多含有结点数为()I I-1 I-1 IA.2I B .2I-1-1 C .2I-1D .2I-110.一棵二叉树高度为h, 所有结点的度或为0,或为2,则这棵二叉树最少有()结点A.2h B .2h-1 C .2h+1 D .h+111.利用二叉链表存储树,则根结点的右指针是()。

第7章树和二叉树(5)-数据结构教程(Java语言描述)-李春葆-清华大学出版社

第7章树和二叉树(5)-数据结构教程(Java语言描述)-李春葆-清华大学出版社

A
B
C
先序线索二叉树
DE
F
二叉树
A
B
C
DE F
先序序列:ABDCEF
2/38
在原二叉链中增加了ltag和rtag两个标志域。
ltag=
0 表示lchild指向结点的左孩子 1 表示lchild指向结点的前驱结点即为线索
rtag=
0 表示rchild指向结点的左孩子 1 表示rchild指向结点的后继结点即为线索
pre=root;
Thread(b);
pre.rchild=root; pre.rtag=1; root.rchild=pre; } }
//建立以root为头结点的中序线索二叉树 //创建头结点root //头结点域置初值 //b为空树时
//b不为空树时
//pre是p的前驱结点,用于线索化 //中序遍历线索化二叉树 //最后处理,加入指向根结点的线索
ltag=rtag=0; }
public ThNode(char d) { data=d;
lchild=rchild=null; ltag=rtag=0; } }
//线索二叉树结点类型 //存放结点值 //左、右孩子或线索的指针 //左、右标志 //默认构造方法
//重载构造方法
5/38
中序线索化二叉树类ThreadClass
public class ThreadClass
{ ThNode b;
//二叉树的根结点
ThNode root;
//线索二叉树的头结点
ThNode pre;
//用于中序线索化,指向中序前驱结点
String bstr;
public ThreadClass()

部分习题参考答案(数据结构 李春葆)PPT课件

部分习题参考答案(数据结构 李春葆)PPT课件

//对应的队列为空队时
{
QH[x]=s;
QT[x]=s;
}
else
{
QT[x]->next=s; //将*s节点链到QT[x]所指节点之后
QT[x]=s;
//让QT[x]仍指向尾节点
}
}
16
void Create(QNode *QH[],QNode *QT[]) //根据用户输入创建队列
{
int n,x,i;
L->data[j+1]=L->data[j]; L->data[i]=x; L->length++; }
1
2.3 设计一个算法,将一个带头结点的数据域依次为a1,a2,…, an(n≥3)的单链表的所有结点逆置,即第一个结点的数据域变 为an,…,最后一个结点的数据域为a1。
void Reverse(LinkList *&L) { LinkList *p=L->next,*q;
}
printf("\n");
}
18
void main()
{
int i;
QNode *QH[MAXQNode],*QT[MAXQNode];
//各队列的队头QH和队尾指针QT
for (i=0;i<MAXQNode;i++)
QH[i]=QT[i]=NULL;
解:(1)A、D均合法,而B、C不合法。因为在B中,先 进栈一次,立即出栈三次,这会造成栈下溢。在C中共进 栈五次,出栈三次,栈的终态不为空。
10
(2)本题使用一个链栈来判断操作序列是否合法,其中A为存
放操作序列的字符数组,n为该数组的元素个数(这里的

第7章树和二叉树(2)-数据结构教程(Java语言描述)-李春葆-清华大学出版社

第7章树和二叉树(2)-数据结构教程(Java语言描述)-李春葆-清华大学出版社
1. 二叉树的定义
二叉树也称为二分树,它是有限的结点集合,这个集合或者是空,或者由 一个根结点和两棵互不相交的称为左子树和右子树的二叉树组成。 二叉树中许多概念与树中的概念相同。 在含n个结点的二叉树中,所有结点的度小于等于2,通常用n0表示叶子结 点个数,n1表示单分支结点个数,n2表示双分支结与度为2的树是不同的。
度为2的树至少有3个结点,而二叉树的结点数可以为0。 度为2的树不区分子树的次序,而二叉树中的每个结点最多有 两个孩子结点,且必须要区分左右子树,即使在结点只有一棵 子树的情况下也要明确指出该子树是左子树还是右子树。
2/35
归纳起来,二叉树的5种形态:
Ø
4/35
3. 满二叉树和完全二叉树
在一棵二叉树中,如果所有分支结点都有左孩子结点和右孩子结点,并且 叶子结点都集中在二叉树的最下一层,这样的二叉树称为满二叉树。
可以对满二叉树的结点进行层序编号,约定编号从树根为1开始,按照层 数从小到大、同一层从左到右的次序进行。
满二叉树也可以从结点个数和树高度之间的关系来定义,即一棵高度为h 且有2h-1个结点的二叉树称为满二叉树。
R={r} r={<ai,aj> | ai,aj∈D, 1≤i,j≤n,当n=0时,称为空二叉树;否则其中
有一个根结点,其他结点构成根结点的互不相交的左、右子树,该 左、右两棵子树也是二叉树 } 基本运算: void CreateBTree(string str):根据二叉树的括号表示串建立其存储结构。 String toString():返回由二叉树树转换的括号表示串。 BTNode FindNode(x):在二叉树中查找值为x的结点。 int Height():求二叉树的高度。 … }
5
E

数据结构第七章参考答案

数据结构第七章参考答案

习题71.填空题(1)由10000个结点构成的二叉排序树,在等概率查找的条件下,查找成功时的平均查找长度的最大值可能达到(___________)。

答案:5000.5(2)长度为11的有序序列:1,12,13,24,35,36,47,58,59,69,71进行等概率查找,如果采用顺序查找,则平均查找长度为(___________),如果采用二分查找,则平均查找长度为(___________),如果采用哈希查找,哈希表长为15,哈希函数为H(key)=key%13,采用线性探测解决地址冲突,即d i=(H(key)+i)%15,则平均查找长度为(保留1位小数)(___________)。

答案:6,3,1.6(3)在折半查找中,查找终止的条件为(___________)。

答案:找到匹配元素或者low>high?(4)某索引顺序表共有元素275个,平均分成5块。

若先对索引表采用顺序查找,再对块元素进行顺序查找,则等概率情况下,分块查找成功的平均查找长度是(___________)。

答案:31(5)高度为8的平衡二叉树的结点数至少是(___________)。

答案: 54 计算公式:F(n)=F(n-1)+F(n-2)+1(6)对于这个序列{25,43,62,31,48,56},采用的散列函数为H(k)=k%7,则元素48的同义词是(___________)。

答案:62(7)在各种查找方法中,平均查找长度与结点个数无关的查找方法是(___________)。

答案:散列查找(8)一个按元素值排好的顺序表(长度大于2),分别用顺序查找和折半查找与给定值相等的元素,平均比较次数分别是s和b,在查找成功的情况下,s和b的关系是(___________);在查找不成功的情况下,s和b的关系是(___________)。

答案:(1)(2s-1)b=2s([log2(2s-1)]+1)-2[log2(2s-1)]+1+1(2)分两种情况考虑,见解答。

数据结构简明教程(李春葆版)课后习题答案

数据结构简明教程(李春葆版)课后习题答案

数据结构简明教程(第2版)配套练习题参考答案———————数据结构简明教程———————1.练习题1参考答案1.单项选择题(1)D (2)C (3)C (4)A (5)C (6)B (7)C (8)A (9)C (10)B 2.填空题(1)①逻辑结构 ②存储结构 ③运算(不限制顺序)(2)①线性结构 ②非线性结构(不限制顺序)(3)①数据元素 ②关系(4)①没有 ②没有(5)①前驱 ②一 ③后继 ④任意多个(6)任意多个(7)①顺序 ②链式 ③索引 ④哈希(不限制顺序)(8)①时间 ②空间(不限制顺序)(9)问题规模(通常用n 表示)。

(10)辅助或临时空间3.简答题(1)答:运算描述是指逻辑结构施加的操作,而运算实现是指一个完成该运算功能的算法。

它们的相同点是,运算描述和运算实现都能完成对数据的“处理”或某种特定的操作。

不同点是,运算描述只是描述处理功能,不包括处理步骤和方法,而运算实现的核心则是处理步骤。

(2)答:T 1(n )=O(n log 2n ),T 2(n )=O( ),T 3(n )=O(n 2),T 4(n )=O(n log 2n )。

(3)答:j =0,第1次循环:j =1,s =10。

第2次循环:j =2,s =30。

第3次循环:j =3,s =60。

第4次循环:j =4,s =100。

while 条件不再满足。

所以,其中循环语句的执行次数为4。

(4)答:语句s ++的执行次数2)2)(3(3)1()1(12121-+=++-+=+-=∑∑∑-=-==n n n n i n n i n i i nj。

(5)答:其中x ++语句为基本运算语句,∑∑∑=+==-=-==n i n i j ni n n i n n T 1112)1()(1)(=O(n 2)。

(6) 答:由于内循环j 的取值范围,所以i ≤n /2,则,该程序段的时间复杂度为O(n 2)。

∑∑∑-===--==2/122/124/))12((n i nij n i n i n m 3log 2n2.练习题2参考答案1.单项选择题(1)A (2)C (3)A (4)B (5)C(6)D (7)C (8)B (9)A (10)C(11)B (12)A (13)C (14)D (15)D(16)D (17)A (18)C (19)A (20)D2.填空题(1)L.length=0(2)O(1)(3)O(n)(4)n-i(5)①物理存储位置②指针域(6)①前驱 ②O(n)(7)q=p->next; p->next=q->next; free(q);(8)s->next= p->next; p->next=s;(9)O(1)(10)L->next==L3.简答题(1)答:顺序存储结构中,逻辑上相邻元素的存储空间也是相邻的,无需额外空间表示逻辑关系,所以存储密度大,同时具有随机存取特性。

数据结构第七章的习题答案

数据结构第七章的习题答案

数据结构第七章的习题答案数据结构第七章的习题答案数据结构是计算机科学中非常重要的一门学科,它研究如何组织和管理数据以便高效地访问和操作。

第七章是数据结构课程中的一个关键章节,它涵盖了树和二叉树这两个重要的数据结构。

本文将为读者提供第七章习题的详细解答,帮助读者更好地理解和掌握这些概念。

1. 问题:给定一个二叉树,如何判断它是否是二叉搜索树?解答:要判断一个二叉树是否是二叉搜索树,我们可以使用中序遍历的方法。

中序遍历会按照从小到大的顺序访问二叉树中的节点。

所以,如果一个二叉树是二叉搜索树,那么它的中序遍历结果应该是一个有序的序列。

具体实现时,我们可以使用递归或者迭代的方式进行中序遍历,并将遍历的结果保存在一个数组中。

然后,我们检查这个数组是否是有序的即可判断二叉树是否是二叉搜索树。

2. 问题:给定一个二叉树,如何找到它的最大深度?解答:要找到一个二叉树的最大深度,我们可以使用递归的方式。

对于每个节点,它的最大深度等于其左子树和右子树中的最大深度加1。

递归的终止条件是节点为空,此时深度为0。

具体实现时,我们可以定义一个递归函数,该函数接收一个节点作为参数,并返回以该节点为根节点的子树的最大深度。

在递归函数中,我们先判断节点是否为空,如果为空则返回0;否则,我们分别计算左子树和右子树的最大深度,然后取两者中的较大值加1作为当前节点的最大深度。

3. 问题:给定一个二叉树,如何判断它是否是平衡二叉树?解答:要判断一个二叉树是否是平衡二叉树,我们可以使用递归的方式。

对于每个节点,我们分别计算其左子树和右子树的高度差,如果高度差大于1,则该二叉树不是平衡二叉树。

具体实现时,我们可以定义一个递归函数,该函数接收一个节点作为参数,并返回以该节点为根节点的子树的高度。

在递归函数中,我们先判断节点是否为空,如果为空则返回0;否则,我们分别计算左子树和右子树的高度,然后取两者中的较大值加1作为当前节点的高度。

最后,我们判断左子树和右子树的高度差是否大于1,如果大于1,则该二叉树不是平衡二叉树。

数据结构课后习题第七章

数据结构课后习题第七章

一、选择题1.设树T的度为4,其中度为1,2,3和4的结点个数分别为4,2,1,1,则T中的叶结点的个数为()。

A.5B.6C.7D.82. 设森林F中有三棵树,第一、第二、第三棵树的结点个数分别为M1,M2和M3。

与森林F对应的二叉树根结点的右子树上的结点个数为()。

A.M1B.M1+M2C.M3D.M2+M33.将一棵树T转换为孩子—兄弟链表表示的二叉树H,则T的后跟序遍历是H的()。

A.前序遍历B.中序遍历C.后序遍历4. 设F是一个森林,B是由F变换得的二叉树。

若F中有n个非终端顶点,则B中右指针域为空的结点有()。

A.n-1B.nC.n+1D.n+25.如果2T是由有序树T转换而来的二叉树,那么T中结点的后序遍历序列就是T的()遍历序列。

2A.先序B.中序C.后序D.层次序6. 在一颗度为4的树T 中,若有20个度为4的结点,10个度为3的结点,1个度为2的结点,10个度为1的结点,则树T中叶结点的个数是()。

A.41B.42C.82D.122二、判断题1.树形结构中元素之间存在一对多个的关系.()。

2.将一棵树转成二叉树,根结点没有左子树()。

3.树与二叉树是两种不同的树形结构。

()4.对树定义中序遍历和对森林定义后序遍历都无意义()。

5.由树的先序遍历序列和后序遍历序列可以唯一确定该树()。

三、填空题1.树在计算机内的表示方式有(),(),()。

2.已知一棵树度为3的树有2个度为1的结点,3个度为2的结点,4个度为3的结点,则该树有()个叶子结点。

3.每一棵树都能唯一的转换为它所对应的二叉树。

若已知一颗二叉树的前序遍历序列是BEFCGDH,中序遍历序列是FEBGCHD,则它的后序遍历序列是()。

设上述二叉树是由某棵树转换而成,则该树的先序遍历序列是()。

4. 先序遍历森林正好等同于按()遍历对应的二叉树,后序遍历森林正好等同于按()遍历对应的二叉树。

5.利用树的孩子兄弟表示法存储,可以将一棵树转换为()。

第7章图(3)-数据结构教程(Python语言描述)-李春葆-清华大学出版社

第7章图(3)-数据结构教程(Python语言描述)-李春葆-清华大学出版社
此时恰好有g.edges[v][i]为∞,看出邻接矩阵为什么这样表示的原因。
15/31
V-U={j|lowcost[j]≠0} j
min=INF k=-1 for j in range(g.n):
if lowcost[j]!=0 and lowcost[j]<min: min=lowcost[j] k=j
U
v i
closest[j]
U
V-U
V-U
v
lowcost[j]
j
j
表示为
i
closest[j]=i
V-U中顶点j到U中的最小边为(i, j)
将V-U中顶点j到整个U的最小边表示 为(j,closest[j]):lowcost[j]
13/31
对于任意顶点i,如何知道它属于集合U还是集合V-U呢?
U={i|lowcost[i]=0} V-U={j|lowcost[j]≠0}
v j
i
14/31
初始时,U中只有一个顶点v,其他顶点i均在V-U中。
U={i|lowcost[i]=0} V-U={j|lowcost[j]≠0}
v
i
如果(v,i)有一条边,它就是i到U的最小边,置closest[i]=v, lowcost[i]=g.edges[v][i]。 如果(v,i)没有条边,不妨认为有一条权为∞的边,同样置 closest[i]=v,lowcost[i]=g.edges[v][i]
(1)初始化U={v}。以v到其他顶点的所有边为候选边。 (2)重复以下步骤n-1次,使得其他n-1个顶点被加入到U中:
① 从候选边中挑选权值最小的边加入TE(所有候选边一定是连接两个顶点集 U和V-U的边),设该边在V-U中的顶点是k,将顶点k加入U中。

李春葆《数据结构教程》(C++语言描述)配套题库【课后习题】(树和二叉树)

李春葆《数据结构教程》(C++语言描述)配套题库【课后习题】(树和二叉树)

第6章树和二叉树一、单项选择题(1)现有一“遗传”关系,设x是y的父亲,则x可以把他的属性遗传给y。

表示该遗传关系最适合的数据结构为______A.数组B.树C.图D.线性表【答案】B【解析】树是一种非线性数据结构,它的每一个结点可以有零个或多个后继结点,但有且只有一个前趋结点,这一特点正好与父子间的遗传关系相似,所以答案为B项。

(2)一棵高度为h、结点个数为n的m(m≥3)次树中,其分支数是______。

A.nhB.n+hC.n-1D.h-1【答案】C【解析】无论树的高度是多少,其分支数永远比节点数少1,因此答案为C项。

(3)若一棵三次树中有两个度为3的结点,一个度为2的结点,两个度为1的结点,该树一共有______个结点。

A.5B.8C.10D.11【答案】D【解析】结点的度即为该结点的孩子数,由题可知,此树共用孩子3×2+2×1+1×2=10个,又因为根节点不是任何结点的孩子,所以共有结点10+1=11个,答案为D项。

(4)若一棵有n个结点的二叉树,其中所有分支结点的度均为k,该树中的叶子结点个数是______。

A.n(k-1)/kB.n-kC.(n+1)/kD.(nk-n+1)/k【答案】D【解析】在分支结点度均为k的树中,每增加一个分支结点,可以增加(k-1)个叶子,假设该树的叶子结点数为x,则有(n-x)个分支结点,则这些分支结点增加的总叶子数为(k-1)×(n-x-1)+k,即可得到等式(k-1)×(n-x-1)+k =x,解得x=(nk-n+1)/k,答案为D项。

(5)以下关于二叉树的说法中正确的是______。

A.二叉树中每个结点的度均为2B.二叉树中至少有一个结点的度为2C.二叉树中每个结点的度可以小于2D.二叉树中至少有一个结点【答案】C【解析】二叉树的结点的度数不多于2,但是对于其具体的结点数并没有明确的要求,因此答案为C项。

数据结构答案第7章

数据结构答案第7章

第7 章查找技术1970-01-01第7 章查找技术课后习题讲解1. 填空题⑴顺序查找技术适合于存储结构为()的线性表,而折半查找技术适用于存储结构为()的线性表,并且表中的元素必须是()。

【解答】顺序存储和链接存储,顺序存储,按关键码有序⑵设有一个已按各元素值排好序的线性表,长度为125,用折半查找与给定值相等的元素,若查找成功,则至少需要比较()次,至多需比较()次。

【解答】1,7【分析】在折半查找判定树中,查找成功的情况下,和根结点的比较次数最少,为1次,最多不超过判定树的深度。

⑶对于数列{25,30,8,5,1,27,24,10,20,21,9,28,7,13,15},假定每个结点的查找概率相同,若用顺序存储结构组织该数列,则查找一个数的平均比较次数为()。

若按二叉排序树组织该数列,则查找一个数的平均比较次数为()。

【解答】8,59/15【分析】根据数列将二叉排序树画出,将二叉排序树中查找每个结点的比较次数之和除以数列中的元素个数,即为二叉排序树的平均查找长度。

⑷长度为20的有序表采用折半查找,共有()个元素的查找长度为3。

【解答】4【分析】在折半查找判定树中,第3层共有4个结点。

⑸假定一个数列{25,43,62,31,48,56},采用的散列函数为H(k)=k mod 7,则元素48的同义词是()。

【解答】62【分析】H(48)= H(62)=6⑹在散列技术中,处理冲突的两种主要方法是()和()。

【解答】开放定址法,拉链法⑺在各种查找方法中,平均查找长度与结点个数无关的查找方法是()。

【解答】散列查找【分析】散列表的平均查找长度是装填因子的函数,而不是记录个数n的函数。

⑻与其他方法相比,散列查找法的特点是()。

【解答】通过关键码计算记录的存储地址,并进行一定的比较2. 选择题⑴静态查找与动态查找的根本区别在于()。

A 它们的逻辑结构不一样B 施加在其上的操作不同C 所包含的数据元素的类型不一样D 存储实现不一样【解答】B【分析】静态查找不涉及插入和删除操作,而动态查找涉及插入和删除操作。

数据结构 第7章答案(已核 )

数据结构 第7章答案(已核 )

7.6习题一、名词解释(1)主关键字(2)平均查找长度(3)静态查找表(4)动态查找表(5)二叉查找树(6)哈希表二、填空题(1)静态查找表的存储结构主要采用顺序存储结构,如果需要,也可以采用链式存储结构,但当使用二分(折半)查找算法或(斐波那契数列)查找算法来查找时,要求查找表只能是顺序存储结构,并且查找表中的数据序列必须有序。

(2)通过中根序遍历一棵二叉查找树得到的数据序列必然是一个非降序(有序)序列。

(3)各种查找方法中,平均查找长度与结点个数n无关的查找方法是哈希查找。

*(4)如果对一个有序查找表SST进行折半查找,在最坏时要比较10次,那么对该查找表进行顺序查找时,在最坏时要比较210 -1 次。

解析:最坏情况要比较10次,说明树的高度是10。

而一棵深度为10的二叉树,最多有210 -1个结点。

*(5)深度为7的平衡二叉树至少有33 个结点。

解析:在节点最少的情况下,左右子树的高度差为1,则总节点数S(n)=S(n-1)+S(n-2)+1。

已知,初始值S(1) = 1,S(2) = 2,可以推出:S(3) = 4S(4) = 7S(5) = 12S(6) = 20S(7) = 33所以,高度为7的平制衡二百叉树最少结点数是33。

假设深度为n的平衡二叉树至少有F(n)个结点,那么F(n)满足F(n)=F(n-1)+F(n-2)+1。

三、简答题(1)请画出长度为8的有序查找表的折半查找判定树。

(2)折半查找的前提:顺序存储、查找表有序。

(3)已知关键字序列为{45,28,67,33,29,50},二叉排序树初始为空,要求:①画出按正向(从关键字45开始)顺序插入结点建立的二叉排序树。

②画出按反向(从关键字50开始)顺序插入结点建立的二叉排序树。

(4)二叉排序树的平均查找长度:与结点个数和树的形态有关。

(5)设哈希表的地址空间为0~6,哈希函数H(key)=key % 7。

请对关键字序列{32,13,49,18,22,38}按线性探测再散列处理冲突的方法构造哈希表。

数据结构教程 李春葆 七章习题答案

数据结构教程 李春葆 七章习题答案

//在下标为i的前面的数组中寻找两个权值最小的节点,作为孩子节点
for(j = 0; j<i; j++)
{
if(-1==ht[j].parent)
{
if(min1>ht[j].weight)
{
min2 = min1; //至于为什么有这句和下面的一句,,大家依次将权值假设为2 1 3带入里面自己手工模仿运行
设计;狼影
时间:2012.10.5
***************************************/
/******************************************************
若发现错误请 留言本空间,万分感谢!!
/*******************/
-------------------------------------------------------------
权值: 2 3 4 7 8 9 5 9 15 18 33
-------------------------------------------------------------
}
/*************************************************************
输入叶子节点的个数
6
输入6个叶子的权值
2 3 4 7 8 9
哈夫曼树顺序存储如下
-------------------------------------------------------------
{
int i;
printf("\n-------------------------------------------------------------\n");

第7章树和二叉树(4)-数据结构教程(Java语言描述)-李春葆-清华大学出版社

第7章树和二叉树(4)-数据结构教程(Java语言描述)-李春葆-清华大学出版社

if (p.node.rchild!=null)
//有右孩子时将其进队
qu.offer(new QNode(p.lno+1,p.node.rchild));
}
}
return cnt;
}
7/31
解法2
层次遍历中某层的最右结点last
last
A
B
C
D
EF
G
last的作用确定一层是否遍历完成!
8/31
用cnt变量计第k层结点个数(初始为0)。设计队列仅保存结点引用, 置当前层次curl=1,用last变量指示当前层次的最右结点(根结点)进队。 将根结点进队,队不空循环:
int curl=1;
//当前层次,从1开始
BTNode<Character> last;
//当前层中最右结点
last=bt.b;
//第1层最右结点
qu.offer(bt.b);
//根结点进队
while (!qu.isEmpty())
{ if (curl>k) return cnt; p=qu.poll(); if (curl==k) cnt++; if (p.lchild!=null) { q=p.lchild; qu.offer(q); } if (p.rchild!=null) { q=p.rchild; qu.offer(q); } if (p==last) { last=q; curl++; }
}
Queue<QNode> qu=new LinkedList<QNode>(); //定义一个队列qu
QNode p;
qu.offer(new QNode(1,bt.b)); //根结点(层次为1)进队

(NEW)李春葆《数据结构教程》(C++语言描述)配套题库【名校考研真题+课后习题+章节题库+模拟试题】

(NEW)李春葆《数据结构教程》(C++语言描述)配套题库【名校考研真题+课后习题+章节题库+模拟试题】
A.DIV R0,R1;(R0)/(R1)→R0 B.INT n;产生软中断 C.NOT R0;寄存器R0的内容取非 D.MOV R0,addr;把地址处的内存数据放入寄存器R0中 【答案】C 【解析】A项,除法操作出现除数为零的情况时,会产生内中断, CPU切换为内核态进行中断处理;B项,直接产生中断,会切换到内核 态;D项,addr出现非法地址,会出现中断,进而切换到内核态。
D.1用C语言写的某单位的认识管理程序语言,2操作系统,3编译
程序 【答案】B 【解析】计算机系统的组成如下图所示:
其中,C语言写的某单位的认识管理程序语言属于应用程序,编译 程序属于语言处理程序。
3 假定下列指令已装入指令寄存器。则执行时不可能导致CPU从 用户态变为内核态(系统态)的是( )。[2015年联考真题]
5 下列说法中( )不是创建进程必须的。[上海交通大学考研真 题]
A.建立一个进程的进程表项 B.为进程分配内存 C.为进程分配CPU D.将进程表项放入就绪队列 【答案】C 【解析】进程刚被创建后,实际上是处于就绪状态的,所以不许为 进程分配CPU。
6 若系统S1采用死锁避免方法,S2采用死锁检测方法,下列叙述 中正确的是( )。[2015年联考真题]
4 下列选项中会导致进程从执行态变为就绪态的事件是( )。 [2015年联考真题]
A.执行P(wait)操作 B.申请内存失败 C.启动I/0设备 D.被高优先级进程抢占 【答案】D 【解析】D项,被高优先级进程抢占,进程会由执行态变为就绪 态。ABC三项,程序由于缺少资源而由执行态转为阻塞态。
目录
第一部分 名校考研真题 一、选择题 二、综合应用题
第二部分 课后习题 第1章 绪 论 第2章 线性表 第3章 栈和队列 第4章 串 第5章 数组和广义表 第6章 树和二叉树 第7章 图 第8章 查 找 第9章 内排序 第10章 外排序 第11章 数据结构和STL

数据结构第三版第七章作业参考答案

数据结构第三版第七章作业参考答案
if (b==NULL) t=NULL;
else { t=(BTNode *)malloc(sizeof(BTNode));
t->data=b->data; t1=Swap(b->lchild); t2=Swap(b->rchild); t->lchild=t2; t->rchild=t1; } return t; }
}
7.7 假设二叉树采用二叉链存储结构,t 指向根结点,p 所指结点为任一给 定的结点,设 计一个算法,输出从根结点到p 所指结点之间路径。
解:本题可以采用《教程》中例 7.8 的方法(只需对该算法作简单修改即






绍另一种方法,即非递归后序遍历树t(参见《教程》7.4.3 小节后序遍历非


二叉树树 形表示。
答:由《教程》7.6 节的构造算法得到的二叉树的构造过程和二叉树如图 7.3 所示。
b 左:c 右:ed
a 左:cbed 右:hgijf
f 左:hgij 右:空
c 左:空 右:空
d
g
左:e
左:h
右:空 右:ij
e 左:空 右:空
h 左:空 右:空
i 左:空 右:j
j 左:空 右:空
图 7.3 二叉树的构造过程
7.3 设给定权集 w={2,3,4,7,8,9},试构造关于 w 的一棵哈夫曼树,并求其带权 路径长度 WPL。
答:本题的哈夫曼树如图 7.4 所示。
33
18
15
9
97
8
5
4
2
3
图 7.4 一棵哈夫曼树
其带权路径长度WPL=(9+7+8)×2+4×3+(2+3)×4=80。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第 7 章 树和二叉树
教材中练习题及参考答案
1. 有一棵树的括号表示为 A(B,C(E,F(G)),D),回答下面的问题: (1)指出树的根结点。 (2)指出棵树的所有叶子结点。 (3)结点 C 的度是多少? (4)这棵树的度为多少? (5)这棵树的高度是多少? (6)结点 C 的孩子结点是哪些? (7)结点 C 的双亲结点是谁? 答:该树对应的树形表示如图 7.2 所示。 (1)这棵树的根结点是 A。 (2)这棵树的叶子结点是 B、E、G、D。 (3)结点 C 的度是 2。 (4)这棵树的度为 3。 (5)这棵树的高度是 4。 (6)结点 C 的孩子结点是 E、F。 (7)结点 C 的双亲结点是 A。
12. 假设二叉树中每个结点值为单个字符,采用二叉链存储结构存储。设计一个算法 计算一棵给定二叉树 b 中的所有单分支结点个数。 解:计算一棵二叉树的所有单分支结点个数的递归模型 f(b)如下:
f(b)=0 若 b=NULL
6 f(b)=f(b->lchild)+f(b->rchild)+1 f(b)=f(b->lchild)+f(b->rchild)
表7.1 二叉树bt的一种存储结构 1 lchild data rchild 0 j 0 2 0 h 0 3 2 f 0 4 3 d 9 5 7 b 4 6 5 a 0 7 8 c 0 8 0 e 0 9 10 g 0 10 1 i 0
答:(1)二叉树bt的树形表示如图7.3所示。
a b c e h j f i d g e h j c f i b d g a
对应的算法如下:
void FindMinNode(BTNode *b,char &min) { if (b->data<min) min=b->data; FindMinNode(b->lchild,min); //在左子树中找最小结点值 FindMinNode(b->rchild,min); //在右子树中找最小结点值 } void MinNode(BTNode *b) //输出最小结点值 { if (b!=NULL) { char min=b->data; FindMinNode(b,min); printf("Min=%c\n",min); } }
2
数据结构教程学习指导
=n-1=1×n1+2× n2+3× n3+4× n4。综合两式得:n0=n2+2n3+3n4+1=3+2× 2+3× 2=14。 3. 为了实现以下各种功能,其中 x 结点表示该结点的位置,给出树的最适合的存储结 构: (1)求 x 和 y 结点的最近祖先结点。 (2)求 x 结点的所有子孙。 (3)求根结点到 x 结点的路径。 (4)求 x 结点的所有右边兄弟结点。 (5)判断 x 结点是否是叶子结点。 (6)求 x 结点的所有孩子。 答:(1)双亲存储结构。 (2)孩子链存储结构。 (3)双亲存储结构。 (4)孩子兄弟链存储结构。 (5)孩子链存储结构。 (6)孩子链存储结构。 4. 设二叉树 bt 的一种存储结构如表 7.1 所示。 其中, bt 为树根结点指针, lchild、 rchild 分别为结点的左、右孩子指针域,在这里使用结点编号作为指针域值,0 表示指针域值为 空;data 为结点的数据域。请完成下列各题: (1)画出二叉树 bt 的树形表示。 (2)写出按先序、中序和后序遍历二叉树 bt 所得到的结点序列。 (3)画出二叉树 bt 的后序线索树(不带头结点)。
33
0 1
18
0 1 0
15
1Leabharlann 90 19 f 4 c
7 d
8 e
5
0 1
a
2
3
b
图7.6
一棵哈夫曼树
10. 假设二叉树中每个结点的值为单个字符,设计一个算法将一棵以二叉链方式存储 的二叉树 b 转换成对应的顺序存储结构 a。
第 7 章 树形结构
5
解:设二叉树的顺序存储结构类型为 SqBTree,先将顺序存储结构 a 中所有元素置为 ‘#’ (表示空结点) 。将 b 转换成 a 的递归模型如下:
11. 假设二叉树中每个结点值为单个字符,采用顺序存储结构存储。设计一个算法, 求二叉树 t 中的叶子结点个数。 解: 用 i 遍历所有的结点, 当 i 大于等于 MaxSize 时, 返回 0。 当 t[i]是空结点时返回 0; 当 t[i]是非空结点时,若它为叶子结点,num 增 1;否则递归调用 num1=LeftNode(t,2*i) 求出左子树的叶子结点个数 num1,再递归调用 num2=LeftNode(t,2*i+1)求出右子树的叶 子结点个数 num2,置 num+=num1+num2。最后返回 num。对应的算法如下:
第 7 章 树形结构 图 7.3 二叉树 bt 的逻辑结构 图 7.4 二叉树 bt 的后序线索化树
3
(2)先序序列:abcedfhgij 中序序列:ecbhfdjiga 后序序列:echfjigdba (3)二叉树 bt 的后序序列为 echfjigdba,则后序线索树如图 7.4 所示。 5. 含有 60 个叶子结点的二叉树的最小高度是多少? 答:在该二叉树中,n0=60,n2=n0-1=59,n=n0+n1+n2=119+n1,当 n1=0 且为完全二叉 树时高度最小,此时高度 h=log2(n+1)= log2120=7。所以含有 60 个叶子结点的二叉树的 最小高度是 7。 6. 已知一棵完全二叉树的第 6 层(设根结点为第 1 层)有 8 个叶子结点,则该完全二 叉树的结点个数最多是多少?最少是多少? 答:完全二叉树的叶子结点只能在最下面两层,所以结点最多的情况是第 6 层为倒数 第 2 层,即 1~6 层构成一棵满二叉树,其结点总数为 26-1=63。其中第 6 层有 25=32 个结 点,含 8 个叶子结点,则另外有 32-8=24 个非叶子结点,它们中每个结点有两个孩子结点 (均为第 7 层的叶子结点) ,计为 48 个叶子结点。这样最多的结点个数=63+48=111。 结点最少的情况是第 6 层为最下层,即 1~5 层构成一棵满二叉树,其结点总数为 5 2 -1=31,再加上第 6 层的结点,总计 31+8=39。这样最少的结点个数为 39。 7. 已知一棵满二叉树的结点个数为 20~40 之间,此二叉树的叶子结点有多少个? 答:一棵高度为 h 的满二叉树的结点个数为 2h-1,有:20≤2h-1≤40。 则 h=5,满二叉树中叶子结点均集中在最底层,所以叶子结点个数=25-1=16 个。 8. 已知一棵二叉树的中序序列为 cbedahgijf,后序序列为 cedbhjigfa,给出该二叉树树 形表示。 答:该二叉树的构造过程和二叉树如图 7.5 所示。
根:g 左中序:h,右中序:ij 左后序:h,右后序:ji
根:e 左中序:空,右中序:空 左后序:空,右后序:空
根:h 左中序:空,右中序:空 左后序:空,右后序:空
根:i 左中序:空,右中序:j 左后序:空,右后序:j
根:j 左中序:空,右中序:空 左后序:空,右后序:空 图 7.5 二叉树的构造过程
数据结构教程学习指导 若 b 结点为单分支 其他情况
对应的算法如下:
int SSonNodes(BTNode *b) { int num1,num2,n; if (b==NULL) return 0; else if ((b->lchild==NULL && b->rchild!=NULL) || (b->lchild!=NULL && b->rchild==NULL)) n=1; //为单分支结点 else n=0; //其他结点 num1=SSonNodes(b->lchild); //递归求左子树中单分支结点数 num2=SSonNodes(b->rchild); //递归求右子树中单分支结点数 return (num1+num2+n); }
f(b,a,i) f(b,a,i) a[i]='#'; 由 b 结点 data 域值建立 a[i]元素; f(b->lchild,a,2*i); f(b->rchild,a,2*i+1) 当 b=NULL 其他情况
调用方式为:f(b,a,1)(a 的下标从 1 开始) 。对应的算法如下:
void Ctree(BTNode *b,SqBTree a,int i) { if (b!=NULL) { a[i]=b->data; Ctree(b->lchild,a,2*i); Ctree(b->rchild,a,2*i+1); } else a[i]='#'; }
A B E C F G 图 7.2 一棵树 D
2. 若一棵度为 4 的树中度为 2、3、4 的结点个数分别为 3、2、2,则该树的叶子结点 的个数是多少? 答:结点总数 n=n0+n1+n2+n3+n4,又由于除根结点外,每个结点都对应一个分支,所 以总的分支数等于 n-1。而一个度为 i(0≤i≤4)的结点的分支数为 i,所以有:总分支数
第 7 章 树形结构 void Copy(BTNode *b1,BTNode *&b2) { if (b1==NULL) b2=NULL; else { b2=(BTNode *)malloc(sizeof(BTNode)); b2->data=b1->data; Copy(b1->lchild,b2->lchild); Copy(b1->rchild,b2->rchild); } }
4
数据结构教程学习指导 根:a 左中序:cbed,右中序:hgijf 左后序:cedb,右后序: hjigf
相关文档
最新文档