数据结构与算法 习题解答 第4章

合集下载

数据结构答案第4章

数据结构答案第4章

第 4 章广义线性表——多维数组和广义表2005-07-14第 4 章广义线性表——多维数组和广义表课后习题讲解1. 填空⑴数组通常只有两种运算:()和(),这决定了数组通常采用()结构来实现存储。

【解答】存取,修改,顺序存储【分析】数组是一个具有固定格式和数量的数据集合,在数组上一般不能做插入、删除元素的操作。

除了初始化和销毁之外,在数组中通常只有存取和修改两种操作。

⑵二维数组A中行下标从10到20,列下标从5到10,按行优先存储,每个元素占4个存储单元,A[10][5]的存储地址是1000,则元素A[15][10]的存储地址是()。

【解答】1140【分析】数组A中每行共有6个元素,元素A[15][10]的前面共存储了(15-10)×6+5个元素,每个元素占4个存储单元,所以,其存储地址是1000+140=1140。

⑶设有一个10阶的对称矩阵A采用压缩存储,A[0][0]为第一个元素,其存储地址为d,每个元素占1个存储单元,则元素A[8][5]的存储地址为()。

【解答】d+41【分析】元素A[8][5]的前面共存储了(1+2+…+8)+5=41个元素。

⑷稀疏矩阵一般压缩存储方法有两种,分别是()和()。

【解答】三元组顺序表,十字链表⑸广义表((a), (((b),c)),(d))的长度是(),深度是(),表头是(),表尾是()。

【解答】3,4,(a),((((b),c)),(d))⑹已知广义表LS=(a,(b,c,d),e),用Head和Tail函数取出LS中原子b的运算是()。

【解答】Head(Head(Tail(LS)))2. 选择题⑴二维数组A的每个元素是由6个字符组成的串,行下标的范围从0~8,列下标的范围是从0~9,则存放A至少需要()个字节,A的第8列和第5行共占()个字节,若A按行优先方式存储,元素A[8][5]的起始地址与当A按列优先方式存储时的()元素的起始地址一致。

《数据结构与算法(C++语言版)》第4章_串

《数据结构与算法(C++语言版)》第4章_串

串函数与串的类定义
• 常用的 常用的C++串函数 串函数 • C++的串库(string.h)中提供了许多字符串的操作函数,几 个常用的C++字符串函数及其使用方法如下。 •假设已有以下定义语句:
串函数与串的类定义
• (1)串拷贝函数 • char *strcpy(char *s1, const char *s2),将字符串s2复制到字 符串数组s1中,返回s1的值。 • char *strncpy(char *s1, const char *s2, size_tn)将字符串s2中最 多n个字符复制到字符串数组s1中,返回s1的值。 • 例如:
串函数与串的类定义
• (3)串比较函数 • int strcmp(const char *s1, const char *s2),比较字符串s1和字 符串s2。函数在s1等于、小于或大于s2时,分别返回0、小 于0或者大于0的值。 • int strncmp(const char *s1, const char *s2, size_tn)比较字符串 s1中的n个字符和字符串s2。函数在s1等于、小于或大于s2 时,分别返回0、小于0或者大于0的值。 • 例如:
串模式匹配
• 无回溯的匹配算法 • 在上面介绍的匹配算法中,某趟匹配失败时,下一趟的匹 配相当于将子串P后移1位再从头与主串中对应字符进行比 较,即相当于i指示器回溯到上趟(最近失败的一趟)匹配 的起点的下一个位置,这样,主串中每个字符都要与子串 中的第1个字符对应一次,再向后比较。因此,主串中每个 字符参加比较的次数最多可达n次(n为子串长度),因此 时间复杂度为O(nm)。那么,能否使目标串中每个字符只参 加一次比较呢?也就是说,能否不回溯i指示器?回答是肯 定的。这个问题是由D.E.Knoth与V.R.Pratt和J.H.Morris同时 解决的,所以有的文献也称这种思想的串匹配算法为KMP 算法。

数据结构第三四章习题答案

数据结构第三四章习题答案

第3章栈和队列习题1.选择题(1)若让元素1,2,3,4,5依次进栈,则出栈次序不可能出现在()种情况。

A.5,4,3,2,1 B.2,1,5,4,3 C.4,3,1,2,5 D.2,3,5,4,1(2)若已知一个栈的入栈序列是1,2,3,…,n,其输出序列为p1,p2,p3,…,pn,若p1=n,则pi为()。

A.i B.n-i C.n-i+1 D.不确定(3)数组Q[n]用来表示一个循环队列,f为当前队列头元素的前一位置,r为队尾元素的位置,假定队列中元素的个数小于n,计算队列中元素个数的公式为()。

A.r-f B.(n+f-r)%n C.n+r-f D.(n+r-f)%n (4)链式栈结点为:(data,link),top指向栈顶.若想摘除栈顶结点,并将删除结点的值保存到x中,则应执行操作()。

A.x=top->data;top=top->link; B.top=top->link;x=top->link;C.x=top;top=top->link; D.x=top->link;(5)设有一个递归算法如下int fact(int n) { 线性表的链式存储结构 D. 栈(11)用链接方式存储的队列,在进行删除运算时()。

A. 仅修改头指针B. 仅修改尾指针C. 头、尾指针都要修改D. 头、尾指针可能都要修改(12)循环队列存储在数组A[0..m]中,则入队时的操作为()。

A. rear=rear+1B. rear=(rear+1)%(m-1)C. rear=(rear+1)%mD. rear=(rear+1)%(m+1)(13)最大容量为n的循环队列,队尾指针是rear,队头是front,则队空的条件是()。

A. (rear+1)%n==frontB. rear==frontC.rear+1==front D. (rear-l)%n==front(14)栈和队列的共同点是()。

计算机导论 第四章 算法与数据结构期末测试习题与答案

计算机导论 第四章 算法与数据结构期末测试习题与答案

1、算法的时间复杂度是指()。

A.算法执行过程中所需要的基本运算次数B.执行算法程序所需要的时间C.算法程序的长度D.算法程序中的指令条数正确答案:A2、算法的空间复杂度是指()。

A.算法程序的长度B.算法程序所占的存储空间C.算法执行过程中所需要的存储空间D.算法程序中的指令条数正确答案:C3、线性表采用链式存储的优点是()。

A.花费的存储空间较顺序储存少B.数据元素的物理顺序与逻辑顺序相同C.便于随机存取D.便于插入和删除操作正确答案:D4、下列叙述中正确的是()。

A.二叉树是线性结构B.线性链表是非线性结构C.线性表是线性结构D.栈与队列是非线性结构5、数据结构中,与所使用的计算机无关的是数据的()。

A.逻辑结构B.物理结构C.物理和存储结构D.存储结构正确答案:A6、存储结构是指()。

A.逻辑结构在计算机中的表示B.数据所占的存储空间量C.存储在外存中的数据D.数据在计算机中的顺序存储方式正确答案:A7、下列关于队列的叙述中,正确的是()。

A.队列是先进后出B.队列是先进先出C.在队列中只能插入数据D.在队列中只能删除数据正确答案:B8、下列关于栈的叙述中,正确的是()。

A.栈只能采用顺序存储B.栈可以采用链式存储,采用链式存储时不会产生栈溢出现象。

C.在栈中只能删除数据D.在栈中只能插入数据9、对长度为n的线性表进行顺序查找,查找成功时,最坏情况下所需要的比较次数为()。

A.n/2B.(n+1)/2C.n+lD.n正确答案:D10、下列叙述中,正确的是()。

A.以上三种说法都不对B.算法就是程序C.设计算法时只需要考虑结果的可靠性D.设计算法时只需要考虑数据结构的设计正确答案:A二、多选题1、如果进栈的顺序为e1,e2,e3,e4,则可能的出栈序列是()。

A.e3,e1,e4,e2B.e4,e3,e2,e1C.e1,e2,e3,e4D.e2,e4,e3,e1正确答案:B、C、D2、已知二叉树后序编历序列是dabec,中续遍历序列是debac,不是其前序编历序列是()。

数据结构答案第4章

数据结构答案第4章
【解答】设稀疏矩阵为m行n列,如果采用二维数组存储,其空间复杂度为O(m×n);因为要将所有的矩阵元素累加起来,所以,需要用一个两层的嵌套循环,其时间复杂度亦为O(m×n)。如果采用三元组顺序表进行压缩存储,假设矩阵中有t个非零元素,其空间复杂度为O(t),将所有的矩阵元素累加起来只需将三元组顺序表扫描一遍,其时间复杂度亦为O(t)。当t<<m×n时,采用三元组顺序表存储可获得较好的时、空性能。
⑴二维数组A的每个元素是由6个字符组成的串,行下标的范围从0~8,列下标的范围是从0~9,则存放A至少需要()个字节,A的第8列和第5行共占()个字节,若A按行优先方式存储,元素A[8][5]的起始地址与当A按列优先方式存储时的()元素的起始地址一致。
A 90 B 180 C 240 D 540 E 108 F 114 G 54
⑵二维数组A中行下标从10到20,列下标从5到10,按行优先存储,每个元素占4个存储单元,A[10][5]的存储地址是1000,则元素A[15][10]的存储地址是()。
【解答】1140
【分析】数组A中每行共有6个元素,元素A[15][10]的前面共存储了(15-10)×6+5个元素,每个元素占4个存储单元,所以,其存储地址是1000+140=1140。
Head(Tail(Tail(Head(ST))))=奖金
⑵工资表ST的头尾表示法如图4-7所示。7.若在矩阵A中存在一个元素ai,j(0≤i≤n-1,0≤j≤m-1),该元素是第i行元素中最小值且又是第j列元素中最大值,则称此元素为该矩阵的一个马鞍点。假设以二维数组存储矩阵A,试设计一个求该矩阵所有马鞍点的算法,并分析最坏情况下的时间复杂度。
⑵因为k和i, j之间是一一对应的关系,k+1是当前非零元素的个数,整除即为其所在行号,取余表示当前行中第几个非零元素,加上前面零元素所在列数就是当前列号,即:

《数据结构与算法》第四章-学习指导材料

《数据结构与算法》第四章-学习指导材料

《数据结构与算法》第四章串知识点及例题精选串(即字符串)是一种特殊的线性表,它的数据元素仅由一个字符组成。

4.1 串及其基本运算4.1.1 串的基本概念1.串的定义串是由零个或多个任意字符组成的字符序列。

一般记作:s="s1 s2 … s n""其中s 是串名;在本书中,用双引号作为串的定界符,引号引起来的字符序列为串值,引号本身不属于串的内容;a i(1<=i<=n)是一个任意字符,它称为串的元素,是构成串的基本单位,i是它在整个串中的序号; n为串的长度,表示串中所包含的字符个数,当n=0时,称为空串,通常记为Ф。

2.几个术语子串与主串:串中任意连续的字符组成的子序列称为该串的子串。

包含子串的串相应地称为主串。

子串的位置:子串的第一个字符在主串中的序号称为子串的位置。

串相等:称两个串是相等的,是指两个串的长度相等且对应字符都相等。

4.2 串的定长顺序存储及基本运算因为串是数据元素类型为字符型的线性表,所以线性表的存储方式仍适用于串,也因为字符的特殊性和字符串经常作为一个整体来处理的特点,串在存储时还有一些与一般线性表不同之处。

4.2.1 串的定长顺序存储类似于顺序表,用一组地址连续的存储单元存储串值中的字符序列,所谓定长是指按预定义的大小,为每一个串变量分配一个固定长度的存储区,如:#define MAXSIZE 256char s[MAXSIZE];则串的最大长度不能超过256。

如何标识实际长度?1. 类似顺序表,用一个指针来指向最后一个字符,这样表示的串描述如下:typedef struct{ char data[MAXSIZE];int curlen;} SeqString;定义一个串变量:SeqString s;这种存储方式可以直接得到串的长度:s.curlen+1。

如图4.1所示。

s.dataMAXSIZE-1图4.1 串的顺序存储方式12. 在串尾存储一个不会在串中出现的特殊字符作为串的终结符,以此表示串的结尾。

数据结构第四章串习题及答案

数据结构第四章串习题及答案

习题四串一、单项选择题‎1.下面关于串‎的的叙述中‎,哪一个是不‎正确的?()A.串是字符的‎有限序列 B.空串是由空‎格构成的串‎C.模式匹配是‎串的一种重‎要运算 D.串既可以采‎用顺序存储‎,也可以采用‎链式存储2.串是一种特‎殊的线性表‎,其特殊性体‎现在()。

A.可以顺序存‎储 B.数据元素是‎一个字符C.可以链接存‎储 D.数据元素可‎以是多个字‎符3.串的长度是‎指()A.串中所含不‎同字母的个‎数 B.串中所含字‎符的个数C.串中所含不‎同字符的个‎数 D.串中所含非‎空格字符的‎个数4.设有两个串‎p和q,其中q是p‎的子串,求q在p中‎首次出现的‎位置的算法‎称为()A.求子串 B.联接 C.匹配 D.求串长5.若串S=“softw‎a re”,其子串的个‎数是()。

A.8 B.37 C.36 D.9二、填空题1.含零个字符‎的串称为_‎_____‎串。

任何串中所‎含____‎__的个数‎称为该串的‎长度。

2.空格串是指‎__ __,其长度等于‎__ __。

3.当且仅当两‎个串的__‎____相‎等并且各个‎对应位置上‎的字符都_‎_____‎时,这两个串相‎等。

一个串中任‎意个连续字‎符组成的序‎列称为该串‎的____‎__串,该串称为它‎所有子串的‎_____‎_串。

4.INDEX‎(‘DATAS‎T RUCT‎U RE’,‘STR’)=_____‎___。

5.模式串P=‘abaab‎c ac’的next‎函数值序列‎为____‎____。

6.下列程序判‎断字符串s‎是否对称,对称则返回‎1,否则返回0‎;如 f("abba")返回1,f("abab")返回0;int f((1)__ _____‎_){int i=0,j=0;while‎(s[j])(2)___ _____‎;for(j--; i<j && s[i]==s[j]; i++,j--);retur‎n((3)___ ____)}7.下列算法实‎现求采用顺‎序结构存储‎的串s和串‎t的一个最‎长公共子串‎。

数据结构与算法python语言实现第4章课后习题

数据结构与算法python语言实现第4章课后习题

数据结构与算法python语⾔实现第4章课后习题R-4.1 对于⼀个含有n个元素的序列S,描述⼀个递归算法查找其最⼤值。

所给出的递归算法时间复杂度和空间复杂度各是多少? python中三⽬运算符的写法x if(x>y)) else ydef max(data,n):if n==1:return data[0]else:m=max(data,n-1)return data[n-1] if(data[n-1]>m) else m共执⾏n次递归调⽤,因为它花费恒定的时间执⾏⾮递归的部分 所以时间复杂度是O(n)空间复杂度也是O(n)R-4.2使⽤在代码段4-11中实现的传统函数,绘制出power(2,5)函数计算的递归跟踪R-4.3如代码段4-12中实现的函数所⽰,使⽤重复平⽅算法,绘制出power(2,18)函数计算的递归跟踪R-4.4 绘制函数reverse(S,0,5)(代码段4-10)执⾏的递归追踪,其中S=[4,3,6,2,6]R-4.6 写⼀个递归函数,⽤于计算第n个调和数,其中 Hn=1+1/2+1/3+…+1/ndef harmonic(n):if n==1:return 1else:return harmonic(n-1)+1/nprint(harmonic(6))R-4.7 写⼀个递归函数,它可以把⼀串数字转换成对应的整数def tonum(data,m,n):if m==len(data)-1:return data[m]else:return data[m]*pow(10,n-1)+tonum(data,m+1,n-1)data=[1,2,3,4,5]print(tonum(data,0,len(data)))R-4.8Isabel⽤⼀种有趣的⽅法来计算⼀个含有n个整数的序列A的所有元素之和,其中n是2的幂.她创建⼀个新的序列B,其⼤⼩是序列A的⼀半并且设置B[i]=A[2i]+A[2i+1] (i=0,1,…,(n/2)-1)。

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

第 4 章 树结构1.选择题(1)C (2)C (3)B (4)B (5)B (6)C (7)C (8)D (9)A (10)D (11)D (12)B (13)B (14)D (15)B2.判断题(1)√(2)√ (3)Ⅹ (4)Ⅹ(5)√ (6)Ⅹ(7)√ (8)√(9)√(10)Ⅹ (11)Ⅹ(12)Ⅹ(13)√(14)Ⅹ(15)Ⅹ(16)Ⅹ(17)√(18)Ⅹ(19)Ⅹ(20)√3.简答题(1)一棵度为 2 的树与一棵二叉树有何区别?树与二叉树之间有何区别?【解答】①二叉树是有序树,度为 2 的树是无序树,二叉树的度不一定是 2。

②二叉树是有序树,每个结点最多有两棵子树,树是无序树,且每个结点可以有多棵子树。

A(2)对于图 4-37 所示二叉树,试给出: 1)它的顺序存储结构示意图;BC2)它的二叉链表存储结构示意图; 3)它的三叉链表存储结构示意图。

DEF【解答】 1)顺序存储结构示意图:AB CDEF ^ ^ ^ G^ ^ HGH(图 4-37)2)二叉链表存储结构示意图:3)三叉链表存储结构示意图:ABC^^D^E^ ^ F^G^^H^A^BC^^ D^E^^F^ G^^ H^(3)对于图 4-38 所示的树,试给出: 1)双亲数组表示法示意图; 2)孩子链表表示法示意图; 3)孩子兄弟链表表示法示意图。

ABCGFEDIHJKMN(图 4-38)【解答】 1)双亲数组表示法示意图:2)孩子链表表示法示意图:0 A -1 1 B0 2 C0 3 D2 4 E2 5F1 6 G1 7 H5 8I 2 9J 4 10 K 4 11 M 3 12 N 83)孩子兄弟链表表示法示意图:0A 1B 2C 3D 4E 5F 6G 7H 8I 9J 10 K 11 M 12 N12^56^348^11 ^ 910 ^7^12 ^ABC^^GFEDI^^ H^^J^ K^ ^ M^ ^ N^(4)画出图 4-39 所示的森林经转换后所对应的二叉树,并指出森林中满足什么条件的 结点在二叉树中是叶子。

AFJB ECDGHI(图 4-39)【解答】ABFECGJDHI在二叉树中某结点所对应的森林中结点为叶子结点的条件是该结点在森林中既没有孩 子也没有右兄弟结点。

(5)将题 4-40 图所示的二叉树转换成相应的森林。

图 4-40 简答题 5 用图【解答】森林:ACBEHFDG(6)证明:在结点数多于 1 的哈夫曼树中不存在度为 1 的结点。

证明:由哈夫曼树的构造过程可知,哈夫曼树的每一分支结点都是由两棵子树合并产生的新结点,其度必为 2,所以哈夫曼树中不存在度为 1 的结点。

(7)证明:若哈夫曼树中有 n 个叶结点,则树中共有 2n-1 个结点。

证明:n 个叶结点,需经 n-1 次合并形成哈夫曼树,而每次合并产生一个分支结点,所 以树中共有 2n-1 个结点。

(8)证明:由二叉树的前序序列和中序序列可以唯一地确定一棵二叉树。

证明:给定二叉树结点的前序序列和对称序(中序)序列,可以唯一确定该二叉树。

因为前序序列的第一个元素是根结点,该元素将二叉树中序序列分成两部分,左边(设 l 个元素)表示左子树,若左边无元素,则说明左子树为空;右边(设 r 个元素)是右子树,若为空,则右子树为空。

根据前序遍历中“根—左子树—右子树”的顺序,则由从第二元素开始 的 l 个结点序列和中序序列根左边的 l 个结点序列构造左子树,由前序序列最后 r 个元素序列与中序序列根右边的 r 个元素序列构造右子树。

(9)已知一棵度为 m 的树中有 n1 个度为 1 的结点,n2 个度为 2 的结点,……,nm 个 度为 m 的结点,问该树中共有多少个叶子结点?有多少个非终端结点?解:设树中共有 n 个结点,n0 个叶结点,那么n=n0+n1+…+nm(1)树中除根结点外,每个结点对应着一个分支,而度为 k 的结点发出 k 个分支,所以:n=n1+2*n2+…+m*nm+1(2)由(1)、(2)可知 n0= n2+2*n3+3*n4+…+(m-1)*nm+1 (10)在具有 n(n>1)个结点的树中,深度最小的那棵树其深度是多少?它共有多少 叶子和非叶子结点?深度最大的那棵树其深度是多少?它共有多少叶子和非叶子结点?2; n-1; 1; n; 1, n-1(11)设高度为 h 的二叉树上只有度为 0 和度为 2 的结点,问该二叉树的结点数可能达到的最大值和最小值。

最大值:2h-1; 最小值:2h-1(12)求表达式: a+b*(c-d)-e/f 的波兰式(前缀式)和逆波兰式(后缀式)。

波兰式: - + a * b – c d / e f逆波兰式:a b c d - * + e f / -(13)画出和下列已知序列对应的树 T:树的先根次序访问序列为:GFKDAIEBCHJ;树的后根访问次序为:DIAEKFCJHBG。

【解答】对应的二叉树和树分别如下左、右图所示:GFKBDCAIEH JGFBKCHDAEJI(14)画出和下列已知序列对应的森林 F: 森林的先根次序访问序列为:ABCDEFGHIJKL; 森林的后根访问次序为:CBEFDGAJIKLH。

AHBDGIKLCEFJ(15)画出和下列已知序列对应的树 T: 二叉树的层次访问序列为:ABCDEFGHIJ; 二叉树的中序访问次序为:DBGEHJACIF。

【解答】A BDEC FGHIJ按层次遍历,第一个结点(若树不空)为根,该结点在中序序列中把序列分成左右两部分—左子树和右子树。

若左子树不空,层次序列中第二个结点左子树的根;若左子树为空,则层次序列中第二个结点右子树的根。

对右子树也作类似的分析。

层次序列的特点是:从左到右每个结点或是当前情况下子树的根或是叶子。

16.假设用于通信的电文由字符集{a,b,c,d,e,f,g}中的字母构成。

它们在电文中出现的频度分别为{0.31,0.16,0.10,0.08,0.11,0.20,0.04},(1)为这 7 个字母设计哈夫曼编码。

(2)对这 7 个字母进行等长编码,至少需要几位二进制数?哈夫曼编码比等长编码使电文总长压缩多少? (1)哈夫曼树:1.00 1a:10 b:110 c:010 d:1110 e:011 f:00 g:11110.41 10.59 10.200.21 0.310.28110.10 0.110.16 0.1210.800.40(2)对这 7 个字母进行等长编码,至少需要 3 位二进制数。

等长编码的平均长度:0.31*3+0.16*3+0.10*3+0.08*3+0.11*3+0.20*3+0.04*3=3 哈夫曼编码:0.31*2+0.16*3+0.10*3+0.08*4+0.11*3+0.20*2+0.04*4=2.54 哈夫曼编码比等长编码使电文总长压缩了:1 - 2.54/3=15.33%2.算法设计题1.给定一棵用二叉链表表示的二叉树,其根指针为 root,试写出求二叉树结点的数目 的算法。

【提示】采用递归算法实现。

二叉树结点的数目=0 左子树结点数目+右子树结点数目+1当二叉树为空 当二叉树非空int count(BiTree root) {if(root==NULL) return (0);else return (count(root->lchild)+count(root->rchild)+1);} 2.请设计一个算法,要求该算法把二叉树的叶结点按从左至右的顺序链成一个单链表。

二叉树按 lchild-rchild 方式存储,链接时用叶结点的 rchild 域存放链指针。

【提示】这是一个非常典型的基于二叉树遍历算法,通过遍历找到各个叶子结点,因为不论 前序遍历、中序遍历和后序遍历,访问叶子结点的相对顺序都是相同的,即都是从左至右。

而题目要求是将二叉树中的叶子结点按从左至右顺序建立一个单链表,因此,可以采用三种 遍历中的任意一种方法遍历。

这里使用中序递归遍历。

设置前驱结点指针 pre,初始为空。

第一个叶子结点由指针 head 指向,遍历到叶子结点时,就将它前驱的 rchild 指针指向它,最后叶子结点的 rchild 为空。

LinkList head,pre=NULL;/*全局变量*/LinkList InOrder(BiTree T)/*中序遍历二叉树 T,将叶子结点从左到右链成一个单链表,表头指针为 head*/{if(T){InOrder(T->lchild);/*中序遍历左子树*/if(T->lchild==NULL && T->rchild==NULL)/*当前是叶子结点*/if(pre==NULL){head=T;pre=T;}/*处理第一个叶子结点*/else {pre->rchild=T;pre=T;}/*将叶子结点链入链表*/InOrder(T->rchild);/*中序遍历右子树*/pre->rchild=NULL;/*设置链表尾结点*/return(head);}3.给定一棵用二叉链表表示的二叉树,其根指针为 root,试写出求二叉树的深度的算 法。

【提示】采取递归算法。

int Height(BiTree root) {int hl,hr; if (root==NULL) return(0); else{hl=Height(root->lchild); hr=Height(root->rchild); if (hl>hr) return (hl+1); else return(hr+1); } }4.给定一棵用二叉链表表示的二叉树,其根指针为 root,试求二叉树各结点的层数。

【提示】采用先序递归遍历算法实现。

二叉树结点的层次数=1 其双亲结点的层次数+1当结点为根结点 当结点非根结点void fun (BiTree root,int n) {if(t==NULL) return; else{printf(“%d”,n); fun(root->lchild,n+1); fun(root->rchild,n+1); } }5.给定一棵用二叉链表表示的二叉树,其根指针为 root,试写出将二叉树中所有结点 的左、右子树相互交换的算法。

【提示】设 root 为一棵用二叉链表存储的二叉树,则交换各结点的左右子树的运算可基于 后序遍历实现:交换左子树上各结点的左右子树;交换左子树上各结点的左右子树;再交换 根结点的左右子树。

void Exchange(BiTree root){BiTNode *p;if(root){Exchange(root->lchild);Exchange(root->rchild);p=root->lchild;root->lchild=root->rchild;root->rchild=p;}} 6.一棵具有 n 个结点的完全二叉树采用顺序结构存储,试设计非递归算法对其进行先 序遍历。

相关文档
最新文档