数据结构 (6)

合集下载

数据结构-6 树和二叉树

数据结构-6 树和二叉树

第六章树和二叉树一.选择题1. 以下说法错误的是。

A.树形结构的特点是一个结点可以有多个直接前趋B.线性结构中的一个结点至多只有一个直接后继C.树形结构可以表达(组织)更复杂的数据D.树(及一切树形结构)是一种"分支层次"结构2. 如图6-2所示的4 棵二叉树中,不是完全二叉树。

图6-2 4 棵二叉树3. 在线索化二叉树中,t 所指结点没有左子树的充要条件是。

A. t->left == NULLB. t->ltag==1C. t->ltag==1 且t->left==NULL D .以上都不对4. 以下说法错误的是。

A.二叉树可以是空集B.二叉树的任一结点最多有两棵子树C.二叉树不是一种树D.二叉树中任一结点的两棵子树有次序之分5. 以下说法错误的是。

A.完全二叉树上结点之间的父子关系可由它们编号之间的关系来表达B.在三叉链表上,二叉树的求双亲运算很容易实现C.在二叉链表上,求根,求左、右孩子等很容易实现D.在二叉链表上,求双亲运算的时间性能很好6. 如图6-3所示的4 棵二叉树,是平衡二叉树。

图6-3 4 棵二叉树7. 如图6-4所示二叉树的中序遍历序列是。

A. abcdgefB. dfebagcC. dbaefcgD. defbagc图6-4 1 棵二叉树8. 已知某二叉树的后序遍历序列是dabec,中序遍历序列是debac,它的前序遍历序列是。

A. acbedB. decabC. deabcD. cedba9. 如果T2 是由有序树T 转换而来的二叉树,那么T 中结点的前序就是T2 中结点的。

A. 前序B.中序C. 后序D. 层次序10. 某二叉树的前序遍历结点访问顺序是abdgcefh,中序遍历的结点访问顺序是dgbaechf,则其后序遍历的结点访问顺序是。

A. bdgcefhaB. gdbecfhaC. bdgaechfD. gdbehfca11. 将含有83个结点的完全二叉树从根结点开始编号,根为1号,后面按从上到下、从左到右的顺序对结点编号,那么编号为41的双亲结点编号为。

数据结构(朱战立)章 (6)

数据结构(朱战立)章 (6)
30
Move Disk 2 from Peg A to Peg C Move Disk 1 from Peg B to Peg C Move Disk 3 from Peg A to Peg B Move Disk 1 from Peg C to Peg A Move Disk 2 from Peg C to Peg B Move Disk 1 from Peg A to Peg B Move Disk 4 from Peg A to Peg C Move Disk 1 from Peg B to Peg C Move Disk 2 from Peg B to Peg A Move Disk 1 from Peg C to Peg A
" from peg ", fromPeg, " to peg
/*把n-1个圆盘从auxPeg借助fromPeg移至
29
towers(n-1,auxPeg,toPeg,fromPeg); }设计一个测试主函数如下: #include <stdio.h> void main(void) {
Towers(4, 'A', 'C', 'B'); }程序运to Peg B
26
Move Disk i from Peg X to Peg Y 这样, 汉
诺塔问题的递归算法可设计如下: void towers(int n,
char fromPeg, char toPeg, char auxPeg)
{
if(n==1)
/*递归出口*/
{
printf("%s%c%s%c\n", "move disk
并不是每个问题都适宜于用递归算法求解。 适宜于用递归 算法求解的问题的充分必要条件是:

数据结构-6_真题-无答案

数据结构-6_真题-无答案

数据结构-6(总分99,考试时间90分钟)一、单项选择题在每小题列出的四个选项中只有一个选项是符合题目要求的。

1. 具有12个记录的序列,采用冒泡排序最少的比较次数是( )A. 1B. 144C. 11D. 662. 任何一个带权的无向连通图的最小生成树( )A. 只有一棵B. 有一棵或多棵C. 一定有多棵D. 可能不存在3. 在一棵具有5层的满二叉树中,结点总数为( )个。

A. 33B. 32C. 31D. 304. 在循环双链表的p所指结点之后插入s所指结点的操作是( )A. P—>next=s;B. p—>next=s;s—>prior=p;p—>next—>prior=s;p—>next—>prior=s;s—>prior=p;s—>next=p—>next;s—>next=p—>nextC. s—>prior=p;D. s—>prior=p;s—>next=p—>next;s—>next=p—>next;p—>next=s;p—>next—>prior=s;p—>next—>prior=s;p—>next=s;5. 在下面的程序中,语句S的执行次数为( ) for(i=1;i<=n-1;i++) {for(j=n;j>=i;j--) {S; }6. 若用冒泡排序法对序列18,14,6,27,8,12,16,52,10,26,47,29,41,24从小到大进行排序,共要进行( )次比较。

A. 33B. 45C. 70D. 917. 用数组A[0..N-1]存放循环队列的元素值,若其头尾指针分别为front和rear,则循环队列中当前元素的个数为( )A. (rear-front+mod mB. (rear-front+1)mod mC. (rear-front-1+mod mD. (rear-fronmod m8. 若已知一个栈的输入序列为1,2,3…,n,其输出序列为P1,P2,…,Pn。

数据结构第六章题目讲解

数据结构第六章题目讲解

数据结构第六章题⽬讲解02⼀选择题:1、以下说法错误的是①树形结构的特点是⼀个结点可以有多个直接前趋②线性结构中的⼀个结点⾄多只有⼀个直接后继③树形结构可以表达(组织)更复杂的数据④树(及⼀切树形结构)是⼀种"分⽀层次"结构⑤任何只含⼀个结点的集合是⼀棵树2.深度为6的⼆叉树最多有( )个结点①64 ②63 ③32 ④313 下列说法中正确的是①任何⼀棵⼆叉树中⾄少有⼀个结点的度为2②任何⼀棵⼆叉树中每个结点的度都为2 ⼆叉树可空③任何⼀棵⼆叉树中的度肯定等于2 ④任何⼀棵⼆叉树中的度可以⼩于24 设森林T中有4棵树,第⼀、⼆、三、四棵树的结点个数分别是n1,n2,n3,n4,那么当把森林T转换成⼀棵⼆叉树后,且根结点的右⼦树上有()个结点。

①n1-1 ②n1③n1+n2+n3④n2+n3+n4⼆.名词解释:1 结点的度 3。

叶⼦ 4。

分⽀点 5。

树的度三填空题⼆叉树第i(i>=1)层上⾄多有_____个结点。

1、深度为k(k>=1)的⼆叉树⾄多有_____个结点。

2、如果将⼀棵有n个结点的完全⼆叉树按层编号,则对任⼀编号为i(1<=i<=n)的结点X有:若i=1,则结点X是_ ____;若i〉1,则X的双亲PARENT(X)的编号为__ ____。

若2i>n,则结点X⽆_ _____且⽆_ _____;否则,X的左孩⼦LCHILD(X)的编号为____。

若2i+1>n,则结点X⽆__ ____;否则,X的右孩⼦RCHILD(X)的编号为_____。

4.以下程序段采⽤先根遍历⽅法求⼆叉树的叶⼦数,请在横线处填充适当的语句。

Void countleaf(bitreptr t,int *count)/*根指针为t,假定叶⼦数count的初值为0*/ {if(t!=NULL){if((t->lchild==NULL)&&(t->rchild==NULL))__ __;countleaf(t->lchild,&count);countleaf(t->rchild,&count);}}5 先根遍历树和先根遍历与该树对应的⼆叉树,其结果_____。

数据结构第六章

数据结构第六章
i 1 k ( 第 i 层的最大结点数 ) 2 2 1 i 1 i 1 k k
K
L
M
任何一棵非空树是一个二元组 Tree = (root,F) 其中:root 被称为根结点, F 被称为子树森林

6.2 二叉树
定义
定义:二叉树是n(n0)个结点的有限集,它或为空树 (n=0),或由一个根结点和两棵分别称为左子树和右子树 的互不相交的二叉树构成 二叉树,度为2的树? 特点
树和二叉树
树是一类重要的非线性数据结构,以分支 关系描述数据元素之间的层次结构 6.1 树 定义: 树(tree)是n(n≥0)个结点的有限集。在任意一棵非
空树中:
有且仅有一个特殊的结点,称为树的根结点(root)
当n>1时,除根结点之外的其余结点可分为
m(m>0)个 互不相交的有限集合T1,T2,……Tm,其 中每一个集合本身又是一棵树,称为根的子树 (subtree)
证明:用归纳法证明之 i=1时,只有一个根结点,2i-1 = 20 = 1; 假设对所有j(1j<i)命题成立,即第j层上至多有2j-1 个结 点,那么,第i-1层至多有2i-2个结点 又二叉树每个结点的度至多为2 第i层上最大结点数是第i-1层的2倍,即2i-2 2 = 2i-1 故命题得证 k 性质2:深度为k的二叉树至多有 2 1 个结点(k1) 证明:由性质1,可得深度为k 的二叉树最大结点数是
基本操作 P :
插入类:
InitTree(&T) // 初始化臵空树 CreateTree(&T, definition) // 按定义构造树 Assign(T, cur_e, value) // 给当前结点赋值 InsertChild(&T, &p, i, c) // 将以c为根的树插入为 结点p的第i棵子树

数据结构第六章图理解练习知识题及答案解析详细解析(精华版)

数据结构第六章图理解练习知识题及答案解析详细解析(精华版)

图1. 填空题⑴设无向图G中顶点数为n,则图G至少有()条边,至多有()条边;若G为有向图,则至少有()条边,至多有()条边。

【解答】0,n(n-1)/2,0,n(n-1)【分析】图的顶点集合是有穷非空的,而边集可以是空集;边数达到最多的图称为完全图,在完全图中,任意两个顶点之间都存在边。

⑵任何连通图的连通分量只有一个,即是()。

【解答】其自身⑶图的存储结构主要有两种,分别是()和()。

【解答】邻接矩阵,邻接表【分析】这是最常用的两种存储结构,此外,还有十字链表、邻接多重表、边集数组等。

⑷已知无向图G的顶点数为n,边数为e,其邻接表表示的空间复杂度为()。

【解答】O(n+e)【分析】在无向图的邻接表中,顶点表有n个结点,边表有2e个结点,共有n+2e个结点,其空间复杂度为O(n+2e)=O(n+e)。

⑸已知一个有向图的邻接矩阵表示,计算第j个顶点的入度的方法是()。

【解答】求第j列的所有元素之和⑹有向图G用邻接矩阵A[n][n]存储,其第i行的所有元素之和等于顶点i的()。

【解答】出度⑺图的深度优先遍历类似于树的()遍历,它所用到的数据结构是();图的广度优先遍历类似于树的()遍历,它所用到的数据结构是()。

【解答】前序,栈,层序,队列⑻对于含有n个顶点e条边的连通图,利用Prim算法求最小生成树的时间复杂度为(),利用Kruskal 算法求最小生成树的时间复杂度为()。

【解答】O(n2),O(elog2e)【分析】Prim算法采用邻接矩阵做存储结构,适合于求稠密图的最小生成树;Kruskal算法采用边集数组做存储结构,适合于求稀疏图的最小生成树。

⑼如果一个有向图不存在(),则该图的全部顶点可以排列成一个拓扑序列。

【解答】回路⑽在一个有向图中,若存在弧、、,则在其拓扑序列中,顶点vi, vj, vk的相对次序为()。

【解答】vi, vj, vk【分析】对由顶点vi, vj, vk组成的图进行拓扑排序。

数据结构课后习题答案第六章

数据结构课后习题答案第六章

第六章树和二叉树(下载后用阅读版式视图或web版式可以看清)习题一、选择题1.有一“遗传”关系:设x是y的父亲,则x可以把它的属性遗传给y。

表示该遗传关系最适合的数据结构为( )。

A.向量B.树 C图 D.二叉树2.树最合适用来表示( )。

A.有序数据元素B元素之间具有分支层次关系的数据C无序数据元素 D.元素之间无联系的数据3.树B的层号表示为la,2b,3d,3e,2c,对应于下面选择的( )。

A. la (2b (3d,3e),2c)B. a(b(D,e),c)C. a(b(d,e),c)D. a(b,d(e),c)4.高度为h的完全二叉树至少有( )个结点,至多有( )个结点。

A. 2h_l C.2h-1 D. 2h5.在一棵完全二叉树中,若编号为f的结点存在右孩子,则右子结点的编号为( )。

A. 2iB. 2i-lC. 2i+lD. 2i+26.一棵二叉树的广义表表示为a(b(c),d(e(,g(h)),f)),则该二叉树的高度为 ( )。

7.深度为5的二叉树至多有( )个结点。

A. 31B. 32C. 16D. 108.假定在一棵二叉树中,双分支结点数为15,单分支结点数为30个,则叶子结点数为( )个。

A. 15B. 16C. 17D. 479.题图6-1中,( )是完全二叉树,( )是满二叉树。

10.在题图6-2所示的二叉树中:(1)A结点是A.叶结点B根结点但不是分支结点C根结点也是分支结点 D.分支结点但不是根结点(2)J结点是A.叶结点B.根结点但不是分支结点C根结点也是分支结点 D.分支结点但不是根结点(3)F结点的兄弟结点是C.空(4)F结点的双亲结点是(5)树的深度为(6)B结点的深度为(7)A结点所在的层是11.在一棵具有35个结点的完全二叉树中,该树的深度为( )。

12. 一棵有124个叶结点的完全二叉树,最多有( )个结点。

A.247 B.248 C.249 D.25013.用顺序存储的方法将完全二叉树中所有结点逐层存放在数组R[1…n]中,结点R[i]若有左子树,则左子树是结点( )。

数据结构试卷及参考答案_6

数据结构试卷及参考答案_6

数据结构试卷(六)一、选择题(30分)1.设一组权值集合W={2,3,4,5,6},则由该权值集合构造的哈夫曼树中带权路径长度之和为()。

(A) 20 (B) 30 (C) 40 (D) 452.执行一趟快速排序能够得到的序列是()。

(A) [41,12,34,45,27] 55 [72,63](B) [45,34,12,41] 55 [72,63,27](C) [63,12,34,45,27] 55 [41,72](D) [12,27,45,41] 55 [34,63,72]3.设一条单链表的头指针变量为head且该链表没有头结点,则其判空条件是()。

(A) head==0 (B) head->next==0(C) head->next==head (D) head!=04.时间复杂度不受数据初始状态影响而恒为O(nlog2n)的是()。

(A) 堆排序(B) 冒泡排序(C) 希尔排序(D) 快速排序5.设二叉树的先序遍历序列和后序遍历序列正好相反,则该二叉树满足的条件是()。

(A) 空或只有一个结点(B) 高度等于其结点数(C) 任一结点无左孩子(D) 任一结点无右孩子6.一趟排序结束后不一定能够选出一个元素放在其最终位置上的是()。

(A) 堆排序(B) 冒泡排序(C) 快速排序(D) 希尔排序7.设某棵三叉树中有40个结点,则该三叉树的最小高度为()。

(A) 3 (B) 4 (C) 5 (D) 68.顺序查找不论在顺序线性表中还是在链式线性表中的时间复杂度为()。

(A) O(n) (B) O(n2) (C) O(n1/2) (D) O(1og2n)9.二路归并排序的时间复杂度为()。

(A) O(n) (B) O(n2) (C) O(nlog2n) (D) O(1og2n)10. 深度为k的完全二叉树中最少有()个结点。

(A) 2k-1-1 (B) 2k-1(C) 2k-1+1 (D) 2k-111.设指针变量front表示链式队列的队头指针,指针变量rear表示链式队列的队尾指针,指针变量s指向将要入队列的结点X,则入队列的操作序列为()。

数据结构第6章二叉树自测题参考答案

数据结构第6章二叉树自测题参考答案

第6章树和二叉树自测卷解答一、下面是有关二叉树的叙述,请判断正误(√)1. 若二叉树用二叉链表作存贮结构,则在n个结点的二叉树链表中只有n—1个非空指针域。

(×)2.二叉树中每个结点的两棵子树的高度差等于1。

(√)3.二叉树中每个结点的两棵子树是有序的。

(×)4.二叉树中每个结点有两棵非空子树或有两棵空子树。

(×)5.二叉树中每个结点的关键字值大于其左非空子树(若存在的话)所有结点的关键字值,且小于其右非空子树(若存在的话)所有结点的关键字值。

(应当是二叉排序树的特点)(×)6.二叉树中所有结点个数是2k-1-1,其中k是树的深度。

(应2i-1)(×)7.二叉树中所有结点,如果不存在非空左子树,则不存在非空右子树。

(×)8.对于一棵非空二叉树,它的根结点作为第一层,则它的第i层上最多能有2i—1个结点。

(应2i-1)(√)9.用二叉链表法(link-rlink)存储包含n个结点的二叉树,结点的2n个指针区域中有n+1个为空指针。

(正确。

用二叉链表存储包含n个结点的二叉树,结点共有2n个链域。

由于二叉树中,除根结点外,每一个结点有且仅有一个双亲,所以只有n-1个结点的链域存放指向非空子女结点的指针,还有n+1个空指针。

)即有后继链接的指针仅n-1个。

(√)10. 具有12个结点的完全二叉树有5个度为2的结点。

最快方法:用叶子数=[n/2]=6,再求n2=n0-1=5二、填空(每空1分,共15分)1.由3个结点所构成的二叉树有5种形态。

2. 一棵深度为6的满二叉树有n1+n2=0+ n2= n0-1=31 个分支结点和26-1 =32个叶子。

注:满二叉树没有度为1的结点,所以分支结点数就是二度结点数。

3.一棵具有257个结点的完全二叉树,它的深度为9。

(注:用⎣ log2(n) ⎦+1= ⎣ 8.xx ⎦+1=94.设一棵完全二叉树有700个结点,则共有350个叶子结点。

数据结构课后习题答案第六章

数据结构课后习题答案第六章

所以
n=n1+2×n2+…+m×nm+1 由(1)(2)可知 n0= n2+2×n3+3×n4+…+(m-1) ×nm+1
(2)
八、证明:一棵满 K 叉树上的叶子结点数 n0 和非叶子结点数 n1 之间满足以下关 系:n0=(k-1)n1+1。 证明:n=n0+n1
n=n1k+1 由上述式子可以推出 n0=(k-1)n1+1 十五、请对右图所示的二叉树进行后序线索化,为每个空指针建立相应的前驱或 后继线索。
四十三、编写一递归算法,将二叉树中的所有结点的左、右子树相互交换。 【分析】 依题意,设 t 为一棵用二叉链表存储的二叉树,则交换各结点的左右子树的
运算基于后序遍历实现:交换左子树上各结点的左右子树;交换右子树上各结点 的左右子树;再交换根结点的左右子树。
【算法】 void Exchg(BiTree *t){ BinNode *p; if (t){ Exchg(&((*t)->lchild)); Exchg(&((*t)->rchild)); P=(*t)->lchild; (*t)->lchild=(*t)->rchild; (*t)->rchild=p; } }
(4)编号为 i 的结点的有右兄弟的条件是什么? 其右兄弟的编号是多少? 解:
(1) 层号为 h 的结点数目为 kh-1 (2) 编号为 i 的结点的双亲结点的编号是:|_ (i-2)/k _|+1(不大于(i-2)/k 的最大整数。也就是(i-2)与 k 整除的结果.以下/表示整除。 (3) 编号为 i 的结点的第 j 个孩子结点编号是:k*(i-1)+1+j; (4) 编号为 i 的结点有右兄弟的条件是(i-1)能被 k 整除

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

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

习题六树和二叉树一、单项选择题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层上最多含有结点数为()A.2I B. 2I-1-1 C. 2I-1 D.2I -110.一棵二叉树高度为h,所有结点的度或为0,或为2,则这棵二叉树最少有( )结点A.2h B.2h-1 C.2h+1 D.h+111. 利用二叉链表存储树,则根结点的右指针是()。

A.指向最左孩子 B.指向最右孩子 C.空 D.非空12.已知一棵二叉树的前序遍历结果为ABCDEF,中序遍历结果为CBAEDF,则后序遍历的结果为()。

数据结构_第六章_图_练习题与答案详细解析(精华版)

数据结构_第六章_图_练习题与答案详细解析(精华版)

图1. 填空题⑴ 设无向图G中顶点数为n,则图G至少有()条边,至多有()条边;若G为有向图,则至少有()条边,至多有()条边。

【解答】0,n(n-1)/2,0,n(n-1)【分析】图的顶点集合是有穷非空的,而边集可以是空集;边数达到最多的图称为完全图,在完全图中,任意两个顶点之间都存在边。

⑵ 任何连通图的连通分量只有一个,即是()。

【解答】其自身⑶ 图的存储结构主要有两种,分别是()和()。

【解答】邻接矩阵,邻接表【分析】这是最常用的两种存储结构,此外,还有十字链表、邻接多重表、边集数组等。

⑷ 已知无向图G的顶点数为n,边数为e,其邻接表表示的空间复杂度为()。

【解答】O(n+e)【分析】在无向图的邻接表中,顶点表有n个结点,边表有2e个结点,共有n+2e个结点,其空间复杂度为O(n+2e)=O(n+e)。

⑸ 已知一个有向图的邻接矩阵表示,计算第j个顶点的入度的方法是()。

【解答】求第j列的所有元素之和⑹ 有向图G用邻接矩阵A[n][n]存储,其第i行的所有元素之和等于顶点i的()。

【解答】出度⑺ 图的深度优先遍历类似于树的()遍历,它所用到的数据结构是();图的广度优先遍历类似于树的()遍历,它所用到的数据结构是()。

【解答】前序,栈,层序,队列⑻ 对于含有n个顶点e条边的连通图,利用Prim算法求最小生成树的时间复杂度为(),利用Kruskal 算法求最小生成树的时间复杂度为()。

【解答】O(n2),O(elog2e)【分析】Prim算法采用邻接矩阵做存储结构,适合于求稠密图的最小生成树;Kruskal算法采用边集数组做存储结构,适合于求稀疏图的最小生成树。

⑼ 如果一个有向图不存在(),则该图的全部顶点可以排列成一个拓扑序列。

【解答】回路⑽ 在一个有向图中,若存在弧、、,则在其拓扑序列中,顶点vi, vj, vk的相对次序为()。

【解答】vi, vj, vk【分析】对由顶点vi, vj, vk组成的图进行拓扑排序。

数据结构第六章:树和二叉树

数据结构第六章:树和二叉树

性质2:深度为 的二叉树至多有 个结点(k≥ 性质 :深度为k的二叉树至多有2 k 1 个结点 ≥1)
证明:由性质 ,可得深度为k 证明:由性质1,可得深度为 的二叉树最大结点数是
(第i层的最大结点数 ) = ∑ 2 i 1 = 2 k 1 ∑
i =1 i =1
k
k
10
性质3:对任何一棵二叉树 ,如果其终端结点数(即 性质 :对任何一棵二叉树T,如果其终端结点数 即 叶节点)为 度为2的结点数为 的结点数为n 叶节点 为n0,度为 的结点数为 2,则n0=n2+1 证明: 为二叉树 中度为1的结点数 为二叉树T中度为 证明:n1为二叉树 中度为 的结点数 因为:二叉树中所有结点的度均小于或等于2 因为:二叉树中所有结点的度均小于或等于 所以:其结点总数n=n0+n1+n2 所以:其结点总数 又二叉树中,除根结点外, 又二叉树中,除根结点外,其余结点都只有一个 分支进入; 分支进入; 为分支总数, 设B为分支总数,则n=B+1 为分支总数 又:分支由度为1和度为 的结点射出,∴B=n1+2n2 分支由度为 和度为2的结点射出, 和度为 的结点射出 于是, 于是,n=B+1=n1+2n2+1=n0+n1+n2 ∴n0=n2+1
7
结点A的度:3 结点 的度: 的度 结点B的度:2 结点 的度: 的度 结点M的度:0 结点 的度: 的度 结点A的孩子: , , 结点 的孩子:B,C,D 的孩子 结点B的孩子 的孩子: , 结点 的孩子:E,F 树的度: 树的度:3 E K 结点A的层次: 结点 的层次:1 的层次 结点M的层次 的层次: 结点 的层次:4 L B F A C G H M

数据结构 第六章 树和二叉树

数据结构 第六章  树和二叉树

F
G
H
M
I
J
结点F,G为堂兄弟 结点A是结点F,G的祖先
5
树的基本操作
树的应用很广,应用不同基本操作也不同。下面列举了树的一些基本操作: 1)InitTree(&T); 2)DestroyTree(&T); 3)CreateTree(&T, definition); 4)ClearTree(&T); 5)TreeEmpty(T); 6)TreeDepth(T); 7) Root(T); 8) Value(T, &cur_e); 9) Assign(T, cur_e, value); 10)Paret(T, cur_e); 11)LeftChild(T, cur_e); 12)RightSibling(T, cur_e); 13)InsertChild(&T, &p, i, c); 14)DeleteChild(&T,&p, i); 15)TraverseTree(T, Visit( ));
1
2 4 8 9 10 5 11 12 6 13 14 3 7 15 4 6 2
1
3
5 7
证明:设二叉树中度为1的结点个数为n1 根据二叉树的定义可知,该二叉树的结点数n=n0+n1+n2
又因为在二叉树中,度为0的结点没有孩子,度为1的结点有1 个孩子,度为2的结点有2个结孩子,故该二叉树的孩子结点 数为 n0*0+n1*1+n2*2(分支数) 而一棵二叉树中,除根结点外所有都为孩子结点,故该二叉 树的结点数应为孩子结点数加1即:n=n0*0+n1*1+n2*2+1
文件夹1
文件夹n

数据结构课后习题答案第六章

数据结构课后习题答案第六章
(1) 前序遍历序列和中序遍历序列相同。 (2) 中序遍历序列和后序遍历序列相同。 (3) 前序遍历序列和后序遍历序列相同。
欢迎下载
6
-
9.已知信息为“ ABCD BCD CB DB ACB ”,请按此信息构造哈夫曼树,求出每一字符的最优编码。 10. 己知中序线索二叉树采用二叉链表存储结构,链结点的构造为:
_,双分支结点的个数为 ____, 3 分支结点的个数为 ____, C 结点的双亲结点为 ____ ,其孩子结点为 ____。
5. 一棵深度为 h 的满 k 叉树有如下性质:第 h 层上的结点都是叶子结点,其余各层上的每个结点都有
k 棵非空子树。
如果按层次顺序(同层自左至右)从 1 开始对全部结点编号,则:
7.二叉树的遍历分为 ____ ,树与森林的遍历包括 ____。 8.一棵二叉树的第 i(i>=1) 层最多有 ____ 个结点;一棵有 n(n>0) 个结点的满二叉树共有 ____ 个叶子和 ____个非终端结点。
9.在一棵二叉树中,假定双分支结点数为 5 个,单分支结点数为 6 个,则叶子结点为 ____个。
A. 逻辑 B.逻辑和存储 C.物理 D.线性 19.由权值分别是 8,7, 2, 5 的叶子结点生成一棵哈夫曼树,它的带权路径长度为
A. 23 B. 37 C. 46 D. 43 20.设 T 是哈夫曼树,具有 5 个叶结点,树 T 的高度最高可以是 ( )。
A.2 B . 3 C. 4 D. 5
()
6.在叶子数目和权值相同的所有二叉树中,最优二叉树一定是完全二叉树。
()
7.由于二叉树中每个结点的度最大为 2,所以二叉树是一种特殊的树。 8.二叉树的前序遍历序列中,任意一个结点均处在其子树结点的前面。

数据结构6

数据结构6

int binSearch(int a[],int n,int k) { int low,high,mid; low=0; high=n-1; while ( low<=high ) { mid=(low+high)/2; if (a[mid]==k) return(mid) ; else if(a[mid]<k) low=mid+1 ; else high=mid-1 ; } return(-1); }
通过在初始为空的树中不断插入数x来建立二叉排序树,步骤: 通过在初始为空的树中不断插入数x来建立二叉排序树,步骤: (1)若二叉排序树为空,则插入结点应为根结点 若二叉排序树为空, (2)若二叉排序树非空,根据关键字比较的结果确定是在左 若二叉排序树非空, 子树还是在右子树中继续查找插入位置, 子树还是在右子树中继续查找插入位置,直至某个结点的 左子树或右子树空为止,则插入结点应为该结点的左孩子 左子树或右子树空为止, 或右孩子。 或右孩子。
二、查找算法及实现
在给定的二叉排序树t中查找给定待查关键字k 在给定的二叉排序树t中查找给定待查关键字k: 从根结点出发 1.如果树t为空,那么查找失败。算法结束;否则, 1.如果树t为空,那么查找失败。算法结束;否则,转2。 如果树 2.如果t >data等于k 则查找成功。算法结束。否则转3 2.如果t->data等于k,则查找成功。算法结束。否则转3。 如果 等于 3.如果k<t->data,那么t=t->lchild(到左子树查找), 3.如果k<t->data,那么t=t->lchild(到左子树查找) 如果k<t t=t 到左子树查找 (1)。 t=t到右子树查找), ),转 转(1)。否则 t=t->rchild (到右子树查找),转 (1)。

数据结构 第6章 排序

数据结构  第6章  排序

判断某序列是否符合堆定义
只要将序列依次排成一棵完全二叉树,所有结点的 值都不大于(或不小于)其左右子树结点的值,那么该 序列就符合堆的定义。 例:序列:102、87、100、79、82、62、84
10 2 87 10 0 82
故: 此序列符 合堆定义。
84
79
62
若n个元素的排序码k1,k2,k3,…,kn满足堆,且让结点 按1、2、3、…、n顺序编号,根据完全二叉树的性质(若i为 根结点,则左孩子为2i,右孩子为2i+1)可知,堆排序实际与 一棵完全二叉树有关。若将排序码初始序列组成一棵完全二 叉树,则堆排序可以包含建立初始堆(使排序码变成能符合 堆的定义的完全二叉树)和利用堆进行排序两个阶段。
14
17
25 )
20
9
(3
14
17
20
25 )
9
第五次插入
(3
9
14
17
20
25)
图 9-1 直接插入排序示例
注意:
排正序时,要插入的元素先和有序表中最后 一个元素进行比较,即从后往前;排逆序时, 则刚相反,得从前往后进行比较。 当n很小时,直接插入排序的效率较高,时间 复杂度为o(n^2)。 正序时比较次数最少为n-1; 逆序时最大为(n+2)*(n-1)/2; 两者的平均值约为(n^2)/4。
例如,n=6,数组R的六个排序码分别为:17,3,25,14,20, 9。下面用图9-3给出冒泡排序算法的执行过程。
0 1 2 3 4 5
初始状态
(17
3
25
14
20
9)
第一趟排序
3
(17
9
25

数据结构第6章树和二叉树

数据结构第6章树和二叉树

数据结构第6章树和⼆叉树第六章树和⼆叉树⼀、选择题1.已知⼀算术表达式的中缀形式为 A+B*C-D/E,后缀形式为ABC*+DE/-,其前缀形式为( )A.-A+B*C/DE B. -A+B*CD/E C.-+*ABC/DE D. -+A*BC/DE2.设树T的度为4,其中度为1,2,3和4的结点个数分别为4,2,1,1 则T中的叶⼦数为()A.5 B.6 C.7 D.83.在下述结论中,正确的是()①只有⼀个结点的⼆叉树的度为0; ②⼆叉树的度为2;③⼆叉树的左右⼦树可任意交换;④深度为K的完全⼆叉树的结点个数⼩于或等于深度相同的满⼆叉树。

A.①②③ B.②③④ C.②④ D.①④4.设森林F对应的⼆叉树为B,它有m个结点,B的根为p,p的右⼦树结点个数为n,森林F中第⼀棵树的结点个数是()A.m-n B.m-n-1 C.n+1 D.条件不⾜,⽆法确定5.⼀棵完全⼆叉树上有1001个结点,其中叶⼦结点的个数是()A.250 B. 254 C.500 D.5016.设给定权值总数有n 个,其哈夫曼树的结点总数为( )A.不确定 B.2n C.2n+1 D.2n-17.有关⼆叉树下列说法正确的是()A.⼆叉树的度为2 B.⼀棵⼆叉树的度可以⼩于2 C.⼆叉树中⾄少有⼀个结点的度为2 D.⼆叉树中任何⼀个结点的度都为2 8.⼆叉树的第I层上最多含有结点数为()A.2I B. 2I-1-1 C. 2I-1 D.2I -19.⼀个具有1025个结点的⼆叉树的⾼h为()A.11 B.10 C.11⾄1025之间 D.10⾄1024之间10.⼀棵⼆叉树⾼度为h,所有结点的度或为0,或为2,则这棵⼆叉树最少有( )结点A.2h B.2h-1 C.2h+1 D.h+111.⼀棵具有 n个结点的完全⼆叉树的树⾼度(深度)是()A.?log2n?+1 B.log2n+1 C.?log2n? D.log2n-112.深度为h的满m叉树的第k层有()个结点。

数据结构 第六章-树

数据结构 第六章-树

20
A B C D
E
F
G H
I J
A
E F H
G
B C
D A
I J
A
B C F
E H
G
B C D F
E G H I J
21
I
D
J
5. 二叉树转换成树和森林
二叉树转换成树 1. 加线:若p结点是双亲结点的左孩子,则将p的右孩 子,右孩子的右孩子,……沿分支找到的所有右孩 子,都与p的双亲用线连起来 2. 抹线:抹掉原二叉树中双亲与右孩子之间的连线 3. 调整:将结点按层次排列,形成树结构7Fra bibliotek6.3.2
树和森林的存储结构
树的存储结构有很多,既可以采用顺序存储结构, 也可以采用链式存储结构。但无论采用哪种存储方式, 都要求存储结构不仅能存储各结点本身的数据信息,还 要能惟一地反映树中各结点之间的逻辑关系。 双亲表示法 孩子链表表示法 孩子兄弟表示法
8
1.双亲表示法 除根外,树中的每个结点都有惟一的一个双亲结点,所以可以用一 组连续的存储空间存储树中的各结点。一个元素表示树中一个结点, 包含树结点本身的信息及结点的双亲结点的位臵。 A B E F C G H D I
}CTBox;
//树结构 typedef struct {CTBox nodes[MAX_TREE_SIZE]; int n, r; }Ctree
12
3. 孩子-兄弟表示法(树的二叉链表)
孩子兄弟表示法用二叉链表作为树的存储结构。将树中的多支关系用 二叉链表的双支关系体现。 ※ 结点的左指针指向它的第一个孩子结点
//孩子结点结构 typedef struct CTNode
1 2 3 4 5 6
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
6/14
6. Analysis T( N ) = T( i ) + T( N – i – 1 ) + c N
§7 Quicksort
The Worst Case:
T( N ) = T( N – 1 ) + c N
T( N ) = O( N2 )
The Best Case: [ ... ... ] • [ ... ... ]
/* Return median of Left, Center, and Right */ /* Order these and hide the pivot */
ElementType Median3( ElementType A[ ], int Left, int Right ) {
int Center = ( Left + Right ) / 2; if ( A[ Left ] > A[ Center ] )
2/14
3. Partitioning Strategy
§7 Quicksort
> < < > < << <> < >
82 1 4 95 0 3 596 28 7 69
i
i
ii
i
ij
j ji
j
BUuhtpN-haoohreStys,oiHw!attwhinNaooHtAWedehpwnTorot’a…eehttdhwlatdaet1etawbnkhnoain,baitmodieneeos1bluwGTtutilt,pssWttodtot(tibooheeh1lulihtkerqtlomNfe,teehhthefwmedrhun…siaemseeyc)staeonittepsoeueno,ao=pn=nwiqoepTxl1pnftcpt=toqiOuhate(yntberi?iiupeeh:ptfnN(toadan…raj?!eiwtNnvultcsrho)-otweoeed2mspo=iti)ciwatpz?jms.i…apaeosbiardln?ysnole.dtsbf–huwejlalyps… subsequences.
T( N ) = 2T( N / 2 ) + c N
T( N ) = O( N log N )
The Average Case:
Assume the average value
of
Read Figure 6.16 on p.214
T(foisro) ltfvhoirenga5ntthyhaiilsgpiosrroitbNh1lmemoN.jn01T
§7 Quicksort -- the fastest known sorting algorithm in practice
1. The Algorithm
void Quicksort ( ElementType A[ ], int N ) {
if ( N < 2 ) return;
pivot = pick any element in A[ ]; Partition S = { A[ ] \ pivot } into two disjoint sets:
K1 K2
T
F
stop
[0,1,2]
K0 K2
K0 K2 possible results.
Thus any decision tree must
T
F have at least N! leaves.
stop
[1,0,2]
K1 K2
If the height of the tree
T
F
T
F
is k, then N! 2k1 (# of
Note: Every permutation is made up of disjoint cycles.
list [0] [1] [2] [3] [4] [5] key da b cf dc ae ef table 04 1 32 03 54 25
temp = d current = 30452 next = 4523
Therefore T(N) = k c N log2 N .
9/14
§10 Bucket Sort and Radix Sort
Bucket Sort
〖Example〗 Suppose that we have N students, each has a
〖Example〗Table Sort
list [0] [1] [2] [3] [4] [5] key d b f c a e
The sorted list is
table 04 1 23 30 45 52
list [ table[0] ], list [ table[1] ], ……, list [ table[n1] ]
5. Imuicksort( ElementType A[ ], int N )
{
Qsort( A, 0, N - 1 );
/* A: the array
*/
/* 0: Left index */
/* N – 1: Right index */
}
4/14
§7 Quicksort
stop
[0,2,1]
stop
[2,0,1]
stop
[1,2,0]
stop
[2,1,0]
leaves in a complete binary tree)
Decision tree for insertion sort on R0, R1, and R2
k log(N!) + 1
Since N! (N/2)N/2 and log2 N! (N/2)log2(N/2) = ( N log2 N )
3/14
4. Small Arrays
§7 Quicksort
Problem: Quicksort is slower than insertion sort for small N ( 20 ).
Solution: Cutoff when N gets small ( e.g. N = 10 ) and use other efficient algorithms (such as insertion sort).
【Theorem】Any algorithm that sorts by comparisons only must have a worst case computing time of ( N log N ).
Proof: T K0 K1 F
When sorting N distinct elements, there are N! different
The worst case: A[ ] is presorted – quicksort will take
O( N2 ) time to do nothing
A Safe Maneuver: Pivot = random select from A[ ]
random number generation is expensive
Swap( &A[ i ], &A[ j ] ); /* adjust partition */ else break; /* partition done */ } Swap( &A[ i ], &A[ Right - 1 ] ); /* restore pivot */ Qsort( A, Left, i - 1 ); /* recursively sort left part */ Qsort( A, i + 1, Right ); /* recursively sort right part */ } /* end if - the sequence is long */ else /* do an insertion sort on the short subarray */ InsertionSort( A + Left, Right - Left + 1 ); }
(
j)
2 N 1
T(N)
N
T ( j) cN
j0
T( N ) = O( N log N )
〖Example〗Given a list of N elements and an integer k. Find the kth largest element.
7/14
§8 Sorting Large Structures
Median-of-Three Partitioning:
Pivot = median ( left, center, right ) Eliminates the bad case for sorted input and actually reduces the running time by about 5%.
Swap( &A[ Left ], &A[ Center ] ); if ( A[ Left ] > A[ Right ] )
Swap( &A[ Left ], &A[ Right ] ); if ( A[ Center ] > A[ Right ] )
Swap( &A[ Center ], &A[ Right ] ); /* Invariant: A[ Left ] <= A[ Center ] <= A[ Right ] */ Swap( &A[ Center ], &A[ Right - 1 ] ); /* Hide pivot */ /* only need to sort A[ Left + 1 ] … A[ Right – 2 ] */ return A[ Right - 1 ]; /* Return pivot */ }
相关文档
最新文档