收藏 分享(赏)

数据结构习题集(包含全部答案).doc

上传人:HR专家 文档编号:7290829 上传时间:2019-05-13 格式:DOC 页数:54 大小:1.15MB
下载 相关 举报
数据结构习题集(包含全部答案).doc_第1页
第1页 / 共54页
数据结构习题集(包含全部答案).doc_第2页
第2页 / 共54页
数据结构习题集(包含全部答案).doc_第3页
第3页 / 共54页
数据结构习题集(包含全部答案).doc_第4页
第4页 / 共54页
数据结构习题集(包含全部答案).doc_第5页
第5页 / 共54页
点击查看更多>>
资源描述

1、 1 / 54数据结构习题集(自编)第一章 绪论一、选择题1数据结构是一门研究非数值计算的程序设计问题中的操作对象以及它们之间的()和运算的学科。 A结构 B关系 C运算 D算法2在数据结构中,从逻辑上可以把数据结构分成() 。A动态结构和静态结构 B紧凑结构和非紧凑结构C线性结构和非线性结构 D逻辑结构和存储结构3线性表的逻辑顺序和存储顺序总是一致的,这种说法() 。A正确 B不正确 C无法确定 D以上答案都不对4算法分析的目的是() 。A找出算法的合理性 B研究算法的输人与输出关系C分析算法的有效性以求改进 D分析算法的易懂性5. 算法的时间复杂度取决于( )A问题的规模 B 待处理数据的

2、初态 C. A 和 B6一个算法应该是( ) 。A程序 B问题求解步骤的描述 C要满足五个基本特性 DA 和 C. 7. 下面关于算法说法错误的是( )A算法最终必须由计算机程序实现B.为解决某问题的算法与为该问题编写的程序含义是相同的C. 算法的可行性是指指令不能有二义性 D. 以上几个都是错误的8以下与数据的存储结构无关的术语是( ) 。A循环队列 B. 链表 C. 哈希表 D. 栈9在下面的程序段中,对 x 的赋值语句的频度为( )for(i=0;inext=p-next-nextBp-next=p-nextCp=p-next-nextDp=p-next; p-next=p-next-n

3、ext14在一个单链表中,已知 q 所指结点是 p 所指结点的前驱,若在 q 和 p6 / 54之间插入 s 所指的结点,则执行( )操作。As-next=p-next; p-next=s;Bq-next=s; s-next=p;Cp-next=s-next; s-next=p;Dp-next=s; s-next=q;15在单链表中附加头结点的目的是为了( ) 。A保证单链表中至少有一个节点B标识单链表中首结点的位置C方便运算的实现D说明单链表是线性表的链式存储16循环单链表的主要优点是( ) 。A不再需要头指针了B从表中任意一个结点出发都能扫描到整个链表C已知某个结点的位置后,能够容易找到它

4、的前驱D在进行插入、删除操作时,能更好地保证链表不断开17非空的循环单链表 L 的尾结点 p 满足( ) 。Ap-next=NULL Bp=NULL Cp-next=L Dp=L18在双向循环链表中,在 p 指针所指向的结点前插入一个指针 q 所指向的新结点,其修改指针的操作是( )。注:双向链表的结点结构为(prior,data,next)。 供选择的答案:Ap-prior=q; q-next=p; p-prior-next=q; q-prior=q;Bp-prior=q; p-prior-next=q; q-next=p; q-prior=p-prior;Cq-next=p; q-prio

5、r=p-prior;p-prior-next=q; p-prior=q;Dq-prior=p-prior; q-next=p; p-prior=q; p-prior=q;19在双向链表存储结构中,删除 p 所指的结点时须修改指针( ) 。Ap-prior-next=p-next; p-next-prior=p-prior;Bp-prior=p-prior-prior; p-prior-next=p;(删 p 的前趋)Cp-next-prior=p; p-next=p-next-next;Dp-next= p-prior-prior; p-prior= p-next-next;二、填空题1线性表

6、(Linear List)是最简单、最常用的一种数据结构。线性表中的元素存在着_的相互关系。 (一对一)2线性表中有且仅有一个开始结点,表中有且仅有一个终端结点,除开始结点外,其他每个元素有且仅有一个_,除终端结点外,其他每个元素有且仅有一个_。3线性表是 n(n=0)个数据元素的_。其中 n 为数据元素的个数,定义为线性表的_。当 n 为零时的表称为_。4所谓顺序表(Sequential LISt)是线性表的_,它是将线性表中的结点按其_依次存放在内存中一组连续的存储单元中,使线性表中相邻的结点存放在_的存储单元中。5单链表不要求逻辑上相邻的存储单元在物理上也一定要相邻。它是分配一些_的存储

7、单元来存储线性表中的数据元素,这些存储单元可以分散在7 / 54内存中的_的位置上,它们在物理上可以是一片连续的存储单元,也可以是_的。因此在表示线性表这种数据结构时,必须在存储线性表元素的同时,也存储线性表的。6线性表的链式存储结构的每一个结点(Node)需要包括两个部分:一部分用来存放元素的数据信息,称为结点的_;另一部分用来存放元素的指向直接后继元素的指针(即直接后继元素的地址信息),称为_或_。7线性链表的逻辑关系是通过每个结点指针域中的指针来表示的。其逻辑顺序和物理存储顺序不再一致,而是一种_存储结构,又称为_。8如果将单链表最后一个结点的指针域改为存放链表中的头结点的地址值,这样就

8、构成了_。9为了能够快速地查找到线性表元素的直接前驱,可在每一个元素的结点中再增加一个指向其前驱的指针域,这样就构成了_。10双向链表某结点的指针 P,它所指向结点的后继的前驱与前驱的后继都是p_。11在单链表中,删除指针 P 所指结点的后继结点的语句是_。12在双循环链表中,删除指针 P 所指结点的语句序列是 P-prior-nextp-next 及_。13单链表是_的链接存储表示。14可以使用_表示树形结构。15向一个长度为 n 的向量的第 i 个元素(lin+1)之前插人一个元素时,需向后移动_个元素。16删除一个长度为 n 的向量的第 i 个元素(lin)时,需向前移动_个元素。17在

9、单链表中,在指针 P 所指结点的后面插人一个结点 S 的语句序列是_。18在双循环链表中,在指针 P 所指结点前插人指针 S 所指的结点,需执行语句_。19取出广义表 A(x, (a,b,c,d) )中原子 c 的函数是_。20在一个具有 n 个结点的有序单链表中插人一个新结点并使之仍然有序的时间复杂度为_。21写出带头结点的双向循环链表 L 为空表的条件_。22线性表、栈和队列都是_结构。23向栈中插人元素的操作是先移动栈_针,再存人元素。1. 一对一2. 直接前驱、直接后继3. 有限序列、长度、空表4. 顺序存储结构、逻辑顺序、地址相邻5. 任意、任意、不连续、逻辑关系6. 数据域、指针域

10、、链域7. 非顺序、非顺序映像8. 循环链表9. 双向链表8 / 5410. 所指向的结点本身11. P-next=p-next-next12. P-next-prior=P-prior13. 线性表14. 双链表15. n-i+116. n-i17. S-next=P-next; P-next=S18. p-prior-next=S;s-prior=p-prior;s-next=p;p-prior=s;19. head(tail(tail(head(tail(head(A)20. O(n)21. (L=L-Next) top=top-122. 先进后出23. 栈顶指针24. top=max2

11、5. top!=nil26. (n+r-f)mod n27. 前一个28. 队首29. n30. lq-front=lq-rear31. 栈顶指针32. 队尾三、判断题1栈和队列都是限制存取点的线性结构。 ( )2不同的入栈和出栈组合可能得到相同输出序列。 ( )3消除递归一定要用栈。 ( )4循环队列是顺序存储结构。 ( )5循环队列不会产生溢出。 ( )6循环队列满的时候 rear= =front。 ( )7在对链队列(带头结点)做出队操作时不会改变 front 指针的值。 ()1. 正确。2. 错误:不同的入栈和出栈组合得到不同输出序列。3. 错误:某些情况如尾递归可以转换为递推的形式。

12、4. 正确。5. 错误:循环队列不会产生假溢出。6. 错误。7. 正确。四、综合题1设有 4 个元素 A、B、C 和 D 进栈,给出它们所有可能的出栈秩序。可能的出栈序列:(共 14 个)ABCD ABDC ACBD ACDB ADCB13 / 54BACD BADC BCAD BCDA BDCACBAD CBDA CDBADCBA不可能的出栈序列:(共 10 个)ADBCBDACCABD CADB CDABDABC DACB DBAC DBCA DCAB14 / 54习题四一、选择项l空串与空格串( ) 。A相同 B不相同 C可能相同 D无法确定2设有两个申 S1 与 S2,求串 S2 在

13、S1 中首次出现位置的运算称作( ) 。A连接 B求子串 C模式匹配 D判子串3串与普通的线性表相比较,它的特殊性体现在( ) 。A顺序的存储结构 B链接的存储结构C数据元素是一个字符 D数据元素可以任意4设有串 S=Computer,则其子串的数目是( ) 。A36 B37 C8 D91. B 2. C 3. C 4. B二、境空题1串是由零个或多个字符组成的_。通常记作:s“c1,c2,cn”(n=0),其中,S 称为_;串中的Ci(1=0)个元素的序列。记作:A(a1,a2,an) ,其中,A 是广义表的_,n 是它的_,当 n=0 的时候称为_。9在一个非空的广义表中,其元素 ai可以

14、是某一确定类型的单个元素,称为_,也可以又是一个广义表,称为_。10广义表的定义是一种递归的定义,广义表是一种递归的数据结构。当广义表非空的时候,称第一个元素 a1为广义表 A 的_,称其余元素组成的表(a2,a3,an)是 A 的_。11广义表的深度一般定义为广义表元素_,或者说是广义表_。利用递归的定义,广义表的深度就是所有子表中_。1. 相同类型数据、地址连续2. 数组元素、数组元素、维数3. 以行序为主、以列序为主4. 特殊矩阵、稀疏矩阵、特殊矩阵、稀疏矩阵5. 对称矩阵6. 三元组顺序表、三元组7. 矩阵转置8. 名称、长度、空表9. 原子、子表10. 表头、表尾11. 最大的层数、

15、括号的重数、最大深度加 1三、判断题1十字链表不是顺序存储结构。 ( )2三元组表不是一个随机存取结构。 ( )18 / 543稀疏矩阵压缩存储后,必然会失去随机存取功能。 ( )4若一个广义表的表头为空表,则此广义表也为空表。 ( )5广义表是线性表的推广,是一类线性数据结构。 ( )6任何一个非空广义表,其表头可能是单元素或广义表,其表尾必定是广义表。 ( )7一个稀疏矩阵 Am*n 采用三元组形式表示,若把三元组中有关行下标与列下标的值互换,并把 m 和 n 的值互换,则就完成了 Am*n 的转置运算。 ( )8数组中每个元素必定具有相同的数据类型。 ( )9线性表是广义表的特例。 (

16、)10如果广义表中的每个元素都是原子,则广义表便成为线性表。 ()11广义表中原子个数即为广义表的长度。 ()12广义表最大子表的深度为广义表的深度。 ()13广义表中元素最大的层数称为广义表的深度。 ()14广义表是一种多层次结构。 ()15广义表是一种线性结构。 ()16广义表是一种共享结构。 ()17广义表是一种递归结构。 ()18广义表是一种单链表结构。 ()1. 正确:十字链表是链接存储结构。2. 正确:具有存取任一元素的时间相等这一特点的存储结构称为随机存取结构,三元组表存储矩阵的时候,要访问第 i 行 j 列元素必须扫描三元组表,显然查找三元组表前面的元素与后面元素所耗费的时间不

17、同,因此三元组表不是一个随机存取结构。3. 正确:随机存取结构是指存取任一元素的时间相等这一特点的存储结构,对稀疏矩阵压缩存储所用的存储结构是十字链表和三元组,而这两种存储结构都不是随机存取结构。4. 错误:如广义表 L=(),(A, B)为非空,而表头为空表。5. 错误:广义表是线性表的推广,是一类非线性数据结构。6. 正确:表尾的定义是除表头元素以外其余元素(可以为空)构成的表,所以必定是广义表。7. 错误:应该在互换行列后再按照行优先重新存储。8. 正确。9. 正确。10. 正确。11. 错误:广义表中元素个数为广义表的长度。12. 错误:广义表最大子表的深度加 1 为广义表的深度。13

18、. 正确。14. 正确。15. 错误:广义表是一种非线性结构。16. 正确。17. 正确。18. 正确:注意单链表结构不一定是线性的。19 / 54第六章 树和二叉树一、选择题l在二叉树后序遍历中,任一个结点均在其子女结点后面,这种说法( ) 。A正确 B不正确 C无法判断 D以上均不对2在二叉树先序遍历中,任一个结点均在其子女结点前面,这种说法( ) 。A正确 B不正确 C无法判断 D以上均不对3设深度为 h 的二叉树上只有叶子结点和同时具有左右子树的结点,则此类二叉树中所包含的结点数目至少为( ) 。A2h B2h C2h1 D2h-l4二叉村第 k 层上最多有( )个结点。A2k B2

19、k-1 C2 k-1 D2k+15二叉树的深度为 k,则二叉树最多有( )个结点。A2k B2k-1 C2 k-1 D2 k -16设某一二叉树先序遍历为 abdec,中序遍历为 dbeac,则该二叉树后序遍历的顺序是( ) 。Aabdec Bdebac Cdebca Dabedc7设某一二叉树中序遍历为 badce,后序遍历为 bdeca,则该二叉树先序遍历的顺序是( ) 。Aadbec Bdecab Cdebac Dabode8将一棵树 T 转换为一棵二叉树 T2,则 T 的先序遍历是 T2 的( ) 。A先序 B中序 C后序 D无法确定9将一棵树 T 转换为一棵二叉树 T2,则 T 的后

20、序遍历是 T2 的( ) 。A先序 B中序 C后序 D无法碉定l0树最适合于用来表示( ) 。A线性结构的数据 B顺序结构的数据C元素之间无前驱和后继关系的数据 D元素之间有包含和层次关系的数据11二叉树的叶子结点在先序、中序和后序遍历过程中的相对秩序( ) 。A发生改变 B不发生改变 C无法确定 D以上均不正确12 设一棵二叉树度为 2 的结点数是 7,度为 1 的结点数是 6,则叶子结点数是( ) 。A6 B7 C8 D913用顺序存储的方法,将完全二叉树中所有结点按层逐个从左到右的顺序存放在一维数组 R1 n中,若结点 Ri有左孩子,则其左孩子是( ) 。20 / 54AR2i-1 BR

21、2i+1 CR2i DR2/i144用顺序存储的方法,将完全二叉树中所有结点按层逐个从左到右的顺序存放在一维数组 R1 n中,若结点 Ri有右孩子,则其右孩子是( ) 。AR2i-1 BR2il CR2i DR2/i15一棵非空的二叉树,先序遍历与后序遍历正好相反,则该二叉树满足( ) 。A无左孩子 B无右孩子 C只有一个叶子结点 D任意二叉树16设 a、b 为一棵二叉树的两个结点,在后序遍历中,a 在 b 前的条件是( ) 。Aa 在 b 上方 Ba 在 b 下方Ca 在 b 左方 Da 在 b 右方17线索二叉树是一种( ) 。A逻辑结构 B线性结构C逻辑和线性结构 D物理结构18N 个结

22、点的线索二叉树中,线索的数目是( ) 。AN-1 BN1 C2N D2N119权值为l,2,6,8的四个结点构成的哈夫曼树的带权路径长度是( ) 。A18 B28 C19 D2920实现任意二叉树的后序遍历的非递归算法而不使用栈结构,最佳方案是二叉村采用( )存储结构。A二叉链表 B广义表存储结构C三叉链表 D顺序存储结构21对一个满二叉树,m 个树叶,k 个分枝结点,n 个结点,则( ) 。Anm1 Bm+1=2n Cmk-1 Dn=2k+123具有五层结点的二叉平衡树至少有( )个结点。A10 B12 C15 D1724设 n,m 为一棵二叉树上的二个结点,在中序遍历时,n 在 m 前的条

23、件是( ) 。An 在 m 右方 Bn 是 m 祖先Cn 在 m 左方 Dn 是 m 子孙25线索二又树是一种( )结构。A逻辑 B逻辑和物理 C物理 D线性26将一棵有 100 个结点的完全二又树从根这一层开始,每一层上从左到右依次对结点进行编号,根结点的编号为 1,则编号为 49 的结点的左孩子编号为( ) 。A98 B99 C50 D48二、填空题1树(Tree)是 n(n0)个结点的_集。2任何一个非空树中:有且仅有一个特定的结点,称为该树的_的结点,_结点之外的其余结点可分为 m(m0)个互21 / 54不相交的有限集合 T1,T2,Tm,且其中每一个集合又是一棵树,称之为_的_。3

24、树的_是指一个数据元素及指向其子树的分支。通常通过一个_来描述,在树型表示中,用一个圆圈及短线表示。4结点的度是指结点所拥有的_。5树内各结点度的_为树的度。6度大于 0 的结点称为_或_。7_称为叶子结点,简称为叶子,又称作终端结点。8一个结点的_,或者说一个结点的_称为该结点的孩子结点,简称为孩子。9一个结点称为其后继结点(即孩子结点)的_。10一个结点的子树中的任一结点都称为该结点的_。11从根到该结点所经分支上的所有结点称为该结点的_。12具有_的结点互称为兄弟结点,简称为兄弟。13从根结点开始定义,根为_层,根的孩子为_层,依次往下类推,若某结点在第 k 层,则其子树的根就在_层。1

25、4其双亲在同一层次上的结点互称为_。15树中结点的_称为树的深度,又称为树的高度。16如果树中各结点的各子树从左至右是有序排列,不可互换的,则称该树为_。17如果树中各结点的各子树无排列顺序,即可以互换位置,则称为该树为_。18n(n0)棵互不相交的树的集合称为_。19二又树(Binary Tree)是结点的有限集合,这个集合或者是空,或者是由一个根结点和_的称为_和_的二叉树构成。20二叉树第 i 层上最多有_个结点。21深度为 k 的二又树最多有_个结点(kl)。22在任意二叉树中,叶子结点的数目(即度为 0 的结点数)等于度为2 的结点数_。23一棵深度为 k 且具有 2k-1 个结点的

26、二叉树称为_。这类二叉树的特点是,二叉树中每一层结点的个数都是_的个数。24_是那种在一棵二叉树中,除最后一层外,若其余层都是满的,并且最后一层或者是满的,或者所缺少的结点都在右边。25具有 n 个结点的完全二叉树的深度是_。26对于一棵有 n 个结点的完全二叉树的结点进行编号(自上而下,自左至右) ,则对任一结点 i(lin) ,如果结点 i=l,则结点 i 是二叉树的_,无双亲;如果结点 il,则其双亲 Parent(i)的序号是结点_;如果 2in,则结点 i 的左孩子 Lchild(BT,,i)是_,否则结点 i 无左孩子(结点 i 必为叶子结点);如果 2iln,则结点 i 的右孩子

27、 RChild(BT,i)的序号是_;否则该结点无右孩22 / 54子。27二叉树的顺序存储结构是用_存储二叉树的数据元素。28_是指按照某条搜索路径访问树中的某个结点,使得树中每个结点均被访问一次,而且仅被访问一次。29先序遍历二叉树的操作定义为:若二叉树为空,则为空操作;否则进行如下操作:访问二叉树_;先序遍历二叉树_;先序遍历二叉树_。30中序遍历二叉树的操作定义为:若二叉树为空,则为空操作;否则进行如下操作:中序遍历二叉树_;访问二又树_;中序遍历二又树_。31后序遍历二叉树的操作定义为:若二叉树为空,则为空操作;否则进行如下操作:后序遍历二叉树_;后序遍历二叉树_;访问二叉树_。32

28、线索二叉树(Threaded Binary Tree)是充分利用二义链表的 n+1 个空的指针域作为线索来标志每一个结点的_和_信息。当某个结点有左孩子的时候,使其_指向其左孩子,无左孩子的时候,使其左指针域指向该结点的_;当某个结点有有孩子的时候,使其右指针域指向该结点的_,无右孩子的时候,使其有指针域指向该结点的_。33线索二叉树的线索链表中,指向结点前驱和后继的指针称为_;加上线索的二叉树称为_;对二叉树以某种次序进行遍历使其成为线索二叉树的过程称为_。34树的存储结构常见的有_、_和_。35树的先序遍历过程如下:若树为空,则进行空操作;若树非空,则:访问树的_;依次先序遍历树的_。36

29、树的后序遍历过程为:若树为空,则进行空操作;若树非空,则:依次后序遍历_;访问_。37森林的先序遍历过程为:若森林非空,则:(1)访问森林中第一棵树的_。(2)先序遍历第一棵树中_。(3)先序遍历_。38森林的后序遍历过程为:若森林非空,则:(l)后序遍历森林中第一棵树的_。(2)访问第一棵树的_。(3)后序遍历_。39从树中一个结点到另一个结点之间的_称为这两个结点的路径。40路径上的分支数目称为_。41树的路径长度是指从树根到每一结点的_。42将树中的结点赋上一个有着某种意义的实数,称此实数为该结点的_。43树的带权路径长度为树中所有叶子结点的_。23 / 5444哈夫曼树(Huffman

30、 Tree)又称_。它是 n 个带权叶子结点构成的所有二叉树中,带权路径长度 WPL_。45,所谓前缀编码是指在所有对字符的编码中,任何一个字符都不是_。46已知完全二叉树的第八层有 8 个结点,则其叶子结点数是_。47在有 n 个叶子结点的哈夫曼树中,总结点数是_。48已知完全二又树的第 7 层有 10 个叶子结点,则整个二又树的结点数最多是_。49已知二叉树中叶子数为 50,仅有一个孩子的结点数为 30,则总结点数为_。50一棵树 T 采用二叉链表 BT 存储,如果树 T 中某结点为叶子结点,则在二叉链表 BT 中所对应的结点一定满足_。51在二叉链表中,判断某指针 P 所指结点为叶子结点

31、的条件是_。52若以4,5,6,7,8作为叶子结点的权值构造哈夫曼树,则其带权路径长度是_。53已知二叉树有 50 个叶子结点,则该二叉树的总结点数至少是_。543 个结点可构成_棵不同形态的树。55已知完全二叉树的第七层有 8 个结点,则其叶子结点数是_.56将一棵有 100 个结点的完全二叉树从根这一层开始,每一层上从左到右依次对结 点进行编号,根结点的编号为 1,则编号为 49 的结点的左孩子编号为_。57若要对某二叉排序树进行遍历,保证输出的所有结点序列按键值递增次序排列, 应对该二叉树采用_遍历法。1. 有限2. 根、根、根、子树3. 结点、记录4. 子树数目5. 最大值6. 分支结

32、点、非终端结点7. 度为零的结点8. 后继结点、子树的根9. 双亲结点10. 子孙结点11. 祖先结点12. 同一双亲13. 第一、第二、第 k+114. 堂兄弟15. 最大层次16. 有序树17. 无序树24 / 5418. 森林19. 两棵互不相交、左子树、右子树20. 2i-121. 2k-122. 加 123. 满二叉树、最大结点24. 完全二叉树25. log2n26. 根、 、2i、2i+1/i27. 一组连续的存储单元28. 遍历二叉树29. 根结点、左子树、右子树30. 左子树、根结点、右子树31. 左子树、右子树、根结点32. 前驱、后继、左指针域、直接前驱结点、右孩子、直接

33、后继结点33. 线索、线索二叉树、线索化34. 双亲表示法、孩子表示法、孩子兄弟表示法35. 根结点、各子树36. 根的各子树、根结点37. 根结点、根结点的子树、除第一棵树之外剩余的树构成的森林38. 根结点的子树、根结点、除第一棵树之外剩余的树构成的森林39. 分支40. 路径长度41. 路径长度之和42. 权43. 带权路径长度之和44. 最优二叉树、最小的二叉树45. 另一个字符的前缀46. 6847. 2n-148. 7449. 12950. 左子树为空51. (p-lchild=nil)struct btnode *lchild, *rchild;bitnode, *bitree;

34、bitnode *CreateBiTree()/*用递归方法建立一棵二叉树*/bitnode *t;char c;printf(“Please input the data,# is the end.n“)c=getchar();if ( c=# ) return(NULL);elset=( bitnode * )malloc (sizeof(bitnode); /*生成新结点*/t-data=c;/*为数据域赋值*/t-lchild=CreateBiTree(); /*递归创建左子树*/t-rchild=CreateBiTree(); /*递归创建右子树*/return(t);/*Creat

35、eBiTree()*/int TreeDepth(bitnode *p)/*递归求二叉树深度*/29 / 54int hl,hr,h;if ( p!=NULL )hl=TreeDepth(p-lchild);/*递归求左子树深度*/hr=TreeDepth(p-rchild);/*递归求右子树深度*/if ( hlhr )h=hl;elseh=hr;return(h1);/*返回较大左右子树深度加 1*/elsereturn(0);/*TreeDepth*/5. 将一棵二叉树复制给另一棵二叉树的算法如下所示:define NULL 0typedef struct btnodeelemtype

36、data;struct btnode *lchild, *rchild;bitnode, *bitree;bitree *CopyTree( bitnode *p )/*复制一棵二叉树*/bitnode *t;if ( p!=NULL )t=(bitnode *)malloc (sizeof (bitnode);t-data=p-data;t-lchild=CopyTree(p-lchild);t-rchild=CopyTree(p-rchild);return(t);elsereturn(NULL);/*CopyTree*/6. 可以使用队列 Q 来保存遍历过程中的各个结点,队列可以设定为b

37、itree 类型的指针数组,下标从 1 开始,同层结点按从左到右的顺序存放。算法如下:define NULL 0define MAXSIZE 100typedef char elemtype;30 / 54typedef struct btnodeelemtype data;struct btnode *lchild, *rchild;bitnode, *bitree;void LevelOrderTraverse( bitree t )/*使用队列对二叉树进行按层序遍历*/bitree *QMAXSIZE;/*队列 Q 是一个指向 bitree 类型的指针数组,下标从 1 开始*/int r

38、ear, front;if (t!=NULL)front=0; /*置空队列*/rear=1;Q1=t;dofront=front%MAXSIZE+1; /*元素出队列*/t=Qfront;printf(“%c“,t-data);if ( t-lchild!=NULL ) /*左子树根结点入队*/rear=rear%MAXSIZE+1;Qrear=t-lchild;if( t-rchild!=NULL ) /*右子树根结点入队*/rear=rear%MAXSIZE+1;Qrear=t-rchild;while(rear=front);/*LevelOrderTraverse*/7. 一棵二叉树的先序遍历序列和中序遍历序列可以惟一确定一棵二叉树。现已知一棵二叉树的先序遍历序列和中序遍历序列,可依次从先序遍历序列中取结点,每次取出一个结点就与中序遍历的序列进行比较,当相等的时候,中序遍历序列就被分成以该结点为根的二叉树子树,该结点左部分为左子树,右部分为右子树,直到取完先序列里的所有结点,则二叉树构造完毕。可设数组A 存放先序遍历序列,数组 B 存放中序遍历序列,为处理方便可设 B 为结构体类型,包括 lchild、rchild 和 ch 三个域。同时可设立一个顺序栈作为工作单元。int CreaBitree( char A, char B )

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报