数据结构__第四章树习题课概论
数据结构与算法 习题解答 第4章
第 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 所示的森林经转换后所对应的二叉树,并指出森林中满足什么条件的 结点在二叉树中是叶子。
数据结构课后习题答案第四章
第四章一、简述下列每对术语的区别:空串和空白串;串常量和串变量;主串和子串;静态分配的顺序串和动态分配的顺序串;目标串和模式串;有效位移和无效位移。
答:●空串是指不包含任何字符的串,它的长度为零。
空白串是指包含一个或多个空格的串,空格也是字符。
●串常量是指在程序中只可引用但不可改变其值的串。
串变量是可以在运行中改变其值的。
●主串和子串是相对的,一个串中任意个连续字符组成的串就是这个串的子串,而包含子串的串就称为主串。
●静态分配的顺序串是指串的存储空间是确定的,即串值空间的大小是静态的,在编译时刻就被确定。
动态分配的顺序串是在编译时不分配串值空间,在运行过程中用malloc和free等函数根据需要动态地分配和释放字符数组的空间(这个空间长度由分配时确定,也是顺序存储空间)。
●目标串和模式串:在串匹配运算过程中,将主串称为目标串,而将需要匹配的子串称为模式串,两者是相对的。
●有效位移和无效位移:在串定位运算中,模式串从目标的首位开始向右位移,每一次合法位移后如果模式串与目标中相应的字符相同,则这次位移就是有效位移(也就是从此位置开始的匹配成功),反之,若有不相同的字符存在,则此次位移就是无效位移(也就是从此位置开始的匹配失败)。
二、假设有如下的串说明:char s1[30]="Stocktom,CA", s2[30]="March 5 1999", s3[30], *p;(1)在执行如下的每个语句后p的值是什么?p=stchr(s1,'t'); p=strchr(s2,'9'); p=strchr(s2,'6');(2)在执行下列语句后,s3的值是什么?strcpy(s3,s1); strcat(s3,","); strcat(s3,s2);(3)调用函数strcmp(s1,s2)的返回值是什么?(4)调用函数strcmp(&s1[5],"ton")的返回值是什么?(5)调用函数stlen(strcat(s1,s2))的返回值是什么?解:(1) stchr(*s,c)函数的功能是查找字符c在串s中的位置,若找到,则返回该位置,否则返回NULL。
计算机存储和组织数据方式之《数据结构》关于“树”的习题(PPT内含答案)
• 12.已知二叉树的先序遍历和后序遍历不能唯一确定这棵 二叉树,这是因为不知道根结点是哪一个。
•
(T )
• 7.树结构中的每个结点最多只有一个直接前驱。 (T )
• 8.完全二叉树一定是满二叉树。 (F)
• 9.由树转换成二叉树,其根结点的右子树一定为空。 (T )
• 10.在先序遍历二叉树的序列中,任何结点的子树的所有 结点都是直接跟在该结点之后。( F )
• 11.一棵二叉树中序遍历序列的最后一个结点,发家是该 二叉树先序遍历的最后一个结点。 ( T )
B.CBDGFEA D.CBEGFDA
• 8.某二又树的后序遍历序列为DABEC,中序遍历序列为
DEBAC,则先序遍历序列为( D )。
• A.ACBED C.DEABC
B.DECAB D.CEDBA
• 9.在完全二叉树中,如果一个结点是叶子结点,则它没 有( C )。
• A.左孩子结点
B.右孩子结点
• 5.对于二叉树来说,第i层上最多有___2i-1______个结点。 • 6.由三个结点构成的二叉树,共有____5_____种不同的
结构。
• 7.由一棵二叉树的先序序列和___中序____序列可唯一 确定这棵二叉树。
习题6
• 9.先序序列和中序序列相同的二叉树为单右枝二叉树或 孤立结点。
• 10.设一棵二叉树共有50个叶子结点(终端结点),则有 ______49______度为2的结点。
• A. 5
B. 6
• C. 7
D. 8
• 6.二叉树的先序遍历序列为ABC的不同二叉树有( C ) 种形态。
• A. 3
B. 4
• C. 5
D.6
习题6
数据结构第4单元课后练习答案
对于三个结点A,B和C,可分别组成多少 不同的无序树、有序树和二叉树?
答:(1)无序树:9棵 (2)有序树:12棵 (3)二叉树:30棵
高度为h的k叉树的特点是:第h层的节点度为 0,其余结点的度均为k。如果按从上到下, 从左到右的次序从1开始编号,则: ①各层的结点是多少? ②编号为i的结点的双亲的编号是多少? ③编号为i的结点的第m个孩子的编号是多少? ④编号为i的结点的有右兄弟的条件是什么?
写出下面得二叉树的遍历结果。
先序:ADEHFJGBCK 中序:HEJFGDABKC 后序:HJGFEDKCBA
设计算法,交换一棵二叉树中每个结点 的左、右子树。
template <class T> void BTree<T>::Exch(BTNode<T> *p){ if (p){ BTNode<T> *q=Exch(p->lchild); p->lchild=Exch(p->rchild); p->rchild=q; } }
试证明在哈夫曼算法的实施过程中,二叉树森林中的每 一棵子树都是Huffman树。
证明: 在Huffman算法进行的每一步,都会有一棵新的二叉树产生,它是合并 原来森林中根结点权值最小的两棵子树而得来的。假设此二叉树为T。 取T的根为一棵独立的子树,则它是一棵Huffman树,将此结点向下分 解,仍然得到一棵Huffman树。 此后,按照与T的形成过程相反的顺序依次分解各叶结点。由于在每次 分解时,新产生的两个叶结点在Huffman算法过程中,都是待合并子树根 结点中权值最小的,也就必然在本二叉树中是权值最小的两个叶结点。 根据前面的定理可知,T是一棵Huffman树。
数据结构第四章的习题答案
数据结构第四章的习题答案数据结构第四章的习题答案在学习数据结构的过程中,习题是非常重要的一环。
通过解答习题,我们可以更好地理解和应用所学的知识。
在第四章中,我们学习了树和二叉树的相关概念和操作。
下面我将为大家提供一些第四章习题的答案,希望能帮助大家更好地掌握这一章节的内容。
1. 请给出树和二叉树的定义。
树是由n(n>=0)个结点构成的有限集合,其中有且仅有一个特定的结点称为根结点,其余的结点可以分为若干个互不相交的有限集合,每个集合本身又是一个树,称为根的子树。
二叉树是一种特殊的树结构,其中每个结点最多有两个子结点,分别称为左子结点和右子结点。
二叉树具有递归的定义,即每个结点的左子树和右子树都是二叉树。
2. 请给出树和二叉树的遍历方式。
树的遍历方式包括前序遍历、中序遍历和后序遍历。
前序遍历是先访问根结点,然后依次遍历左子树和右子树。
中序遍历是先遍历左子树,然后访问根结点,最后遍历右子树。
后序遍历是先遍历左子树和右子树,最后访问根结点。
二叉树的遍历方式包括前序遍历、中序遍历和后序遍历。
前序遍历是先访问根结点,然后依次遍历左子树和右子树。
中序遍历是先遍历左子树,然后访问根结点,最后遍历右子树。
后序遍历是先遍历左子树和右子树,最后访问根结点。
3. 给定一个二叉树的前序遍历序列和中序遍历序列,请构建该二叉树。
这个问题可以通过递归的方式解决。
首先,根据前序遍历序列的第一个结点确定根结点。
然后,在中序遍历序列中找到根结点的位置,该位置左边的结点为左子树的中序遍历序列,右边的结点为右子树的中序遍历序列。
接下来,分别对左子树和右子树进行递归构建。
4. 给定一个二叉树的中序遍历序列和后序遍历序列,请构建该二叉树。
和前面的问题类似,这个问题也可以通过递归的方式解决。
首先,根据后序遍历序列的最后一个结点确定根结点。
然后,在中序遍历序列中找到根结点的位置,该位置左边的结点为左子树的中序遍历序列,右边的结点为右子树的中序遍历序列。
数据结构与算法教程 习题答案 作者 朱明方 吴及 第4章习题解答.docx
第4章习题解答4. 1如图4-51所示的树中,找出树中度最大的结点, 说明度的值?找出树中度最小的结点,其度是多少?该树的度是多少?它的深度是多少?[解答]该树中,度最大的结点分别是包含元素A和C的结点,它们的度图 4-51都为3,它也就是该树的度。
树中的叶子结点是度最小的结点,它们分别是包含元素E, F, G, H, I, J的结点,它们的度都为0。
该树深度为3o4.2 一棵共有n个结点的树,其所有分支结点的度都为k,请求出该树的叶子结点数。
[解答]设树中的分支结点数为队,叶子结点数n°,则有:n=n k+n0 , ①设分支数为B,因为除了根结点以外每个结点都有一个分支指向,因此有:B=n-1, ②另一方面,所有分支都由分支结点发出,则有:B=n k*k , ③比较②、③式有:n k*k =n-l, 即:n k=-!!—!-, ④k将④代入①,可得:n°=n-。
k所以该树的叶子结点数为:n-。
k4.3已知一棵度为m的树中,有m个度为1的结点,有址个度为2的结点,…,有 &个度为m的结点,请计算该树中的叶子结点数。
[解答]设该树共有n个结点,叶子结点数为m,则有:n= no + ni + n2+ …+ n…①另一方面,树中除了根结点以外每个结点都有一个指针指向,也就是说总指针数与总结点数之间相差1;而树中的指针都是由非叶子结点发出的,由此可以得到:n= 1+ ni + 2*m + 3*m + ,,, +m*n“,②比较式①、②有:m = 1 + m + 2m +=1+ £(「1)勺i=24.4假设以孩子表示法用定长结点表示一棵有n个结点,度为k的树,请计算出树中的空指针数目。
[解答]因为树的度为k, n个定长结点共有nk个指针域;除根结点外,每个结点有…个指针指向,即,树中共有n-1个指针。
所以,空指针域个数为:nk-(n-l)=n(k-l)+l (个)。
4.5树与二叉树有何异同?度为2的有序树与二叉树有何区别?[解答]树与二又树都具有明显的层次结构,都是表示•对多的联系。
数据结构第4单元课后练习答案
对于三个结点A,B和C,可分别组成多少 不同的无序树、有序树和二叉树?
答:(1)无序树:9棵 (2)有序树:12棵 (3)二叉树:30棵
高度为h的k叉树的特点是:第h层的节点度为 0,其余结点的度均为k。如果按从上到下, 从左到右的次序从1开始编号,则: ①各层的结点是多少? ②编号为i的结点的双亲的编号是多少? ③编号为i的结点的第m个孩子的编号是多少? ④编号为i的结点的有右兄弟的条件是什么?
试证明在哈夫曼算法的实施过程中,二叉树森林中的每 一棵子树都是Huffman树。
证明: 在Huffman算法进行的每一步,都会有一棵新的二叉树产生,它是合并 原来森林中根结点权值最小的两棵子树而得来的。假设此二叉树为T。 取T的根为一棵独立的子树,则它是一棵Huffman树,将此结点向下分 解,仍然得到一棵Huffman树。 此后,按照与T的形成过程相反的顺序依次分解各叶结点。由于在每次 分解时,新产生的两个叶结点在Huffman算法过程中,都是待合并子树根 结点中权值最小的,也就必然在本二叉树中是权值最小的两个叶结点。 根据前面的定理可知,T是一棵Huffman树。
试证明哈夫曼算法的正确性。
定理 分裂一棵Huffman树的某个叶结点,如果产生的两个叶结点的权值 在所有叶结点权值中最小,则将生成一棵新的Huffman树。 证明: 假设二叉树T是字母表C上的一棵Huffman树,z是它的一个叶节点。在 z的下面添加两个子结点x和y,它们的权值分别是f(x)和f(y),且满足 f(z)=f(x)+f(y), f(x)和f(y)在字母表C' =C-{z}+{x,y}上的权值最小,可设新 产生的二叉树为T'。 在字母表C'上存在一棵最优二叉树T",在T"上x和y互为兄弟结点。在 T"中删除结点x和y,将字母z以及权值f(z)=f(x)+f(y)赋予x和y在T"中的父 结点,得到一棵在字母表C上的二叉树Ť。 根据引理三,可知Ť是字母表C上的最优二叉树,由于T也是字母表C上 的最优二叉树,所以WPL(Ť)= WPL(T)。 由于WPL(Ť)= WPL(T")-f(x)-f(y), WPL(T)= WPL(T')-f(x)-f(y),所以 WPL(T")=WPL(T'),即,T'是字母表C'上的最优二叉树。证毕。 补充说明:利用Huffman算法构造一棵二叉树T后,单独取出根结点和它 的两个子结点,则该子树必是一棵最优二叉树。以后,按照与T的形成过 程的相反的顺序依次分解各叶结点,直到再次构造出T,则依据上面的定 理可知T是一棵Huffman树。
2016数据结构课件-第四章_树
度为0的结点被称为叶结点;度 0的结点被称为 分支结点。
在图4.1中: B有一个子结点E,度为1;A有三个 子结点B、C和D(换言之,A是B、C和D的父结 点),度为3,这棵树的度也为3 .
3.结点的层数 树形T中结点的层数递归定义如下: ⑴ root(T)层数为零; ⑵ 其余结点的层数为其前驱结点的层数加1 .
证毕。
*** 二叉树顺序存储
要存储一棵二叉树,必须存储其所有结点 的数据信息、左孩子和右孩子地址,既可 用顺序结构存储,也可用链接结构存储。
二叉树的顺序存储是指将二叉树中所有结 点按层次顺序存放在一块地址连续的存储 空间中,同时反映出二叉树中结点间的逻 辑关系。
*** 二叉树顺序存储
对于完全二叉树,结点的层次顺序反映了其结构, 可按层次顺序给出一棵完全二叉树之结点的编号,事 实上,这就是完全二叉树的顺序存储方法,结点编号 恰好反映了结点间的逻辑关系。只要对二叉树之结点 按照层次顺序进行编号,就可利用一维数组A来存储 一棵含有n个结点的完全二叉树,其中A[1]存储二叉 树的根结点,A[i]存储二叉树中编号为i的结点,并且 结点A[i]的左孩子(若存在)存放在A[2i]处,而A[i]的 右孩子(若存在)存放在A[2i1]处。
从根结点到某个结点的路径长度恰为该结点的层数。
5. 子孙结点、祖先结点 一棵树中若存在结点vm到vn的路径,则称vn为vm的子孙结 点,vm为vn的祖先结点。
不难看出,一个结点到它的某个子孙结点有且仅有一 条路径。树中结点之间的父子关系具有如下特征:
(1)树中任一结点都可以有零个或多个直接后继(即 子结点),但至多只能有一个直接前驱(即父结点)。
图4.1为一棵由根结点A出发的树,其中,A有三 个子结点B、C和D(换句话说,A是B、C和D的父结 点);B有一个子结点E;E有一个子结点F;C有两个 子结点G和H;D有一个子结点I; F,G,H,I是叶子 结点,因为它们没有子结点。
《数据结构》第四章习题参考答案
《数据结构》第四章习题一、判断题(在正确说法的题后括号中打“√”,错误说法的题后括号中打“×”)1、KMP算法的特点是在模式匹配时指示主串的指针不会变小。
( √)2、串是一种数据对象和操作都特殊的线性表。
( √)3、只包含空白字符的串称为空串(空白串)。
( ×)4、稀疏矩阵压缩存储后,必会(不会)失去随机存取功能。
( ×)5、使用三元组表示稀疏矩阵的非零元素能节省存储空间。
( √)6、插入与删除操作是数据结构中最基本的两种操作,因此这两种操作在数组中也经常使用。
(×)7、若采用三元组表存储稀疏矩阵,只要把每个元素的行下标和列下标互换(错的),就完成了对该矩阵的转置运算。
(×)二、单项选择题1.下面关于串的的叙述中,哪一个是不正确的?( B )A.串是字符的有限序列B.空串是由空格构成的串(空串是长度为零的串)C.模式匹配是串的一种重要运算D.串既可以采用顺序存储,也可以采用链式存储2.有串S1=’ABCDEFG’,S2 = ’PQRST’,假设函数con(x,y)返回x和y串的连接串,subs(s,i,j)返回串s的从序号i的字符开始的j个字符组成的子串,len(s)返回中s的长度,则con(subs(s1,2,len(s2)),subs(s1,len(s2),2))的结果串是( D )。
A.BCDEF B.BCDEFG C.BCPQRST D.CDEFGFG3、串的长度是指( B )A.串中所含不同字母的个数B.串中所含字符的个数C.串中所含不同字符的个数D.串中所含非空格字符的个数三、填空题1、串是一种特殊的线性表,其特殊性表现在_数据元素为字符,操作集也不同__;串的两种最基本的存储方式是_顺序存储_、__ 链式存储_;两个串相等的充分必要条件是__两串的长度相等且两串中对应位置的字符也相等__。
2、设正文串长度为n,模式串长度为m,则串匹配的KMP算法的时间复杂度为_O(m+n)__。
数据结构第4章树PPT学习教案
(c)
(d)
(二叉树 (b)仅有一个根结点的二叉树 (c)右子树为空的二叉树 (d) 左子树为空的二叉树 (e)左右子树均非空的二叉树
二叉树是n(n≥0)个结点的有限集,它或者是空集
(n=0),或者由一个根结点及两棵互不相交的、分别称
作这个根的左子树和右子树的二叉树组成。
结构的能力; 2)具有应用二叉树解决实际问题的能力。 3、素质目标 养成良好的完成工作任务、团队合作、良好沟通、创新
思维和解决问题的能力。
第1页/共47页
4.1 树的概念 树型结构是一类重要的非线性结构。树型结构是 结点之间有分支,并具有层次关系的结构。它非常类似 于自然界中的树。 树结构在客观世界中是大量存在的,在计算机领 域中也有着广泛的应用,如在编译程序中,用树来表示 源程序的语法结构;在数据库系统可用树来组织信息。 1、树的递归定义:树是n(n≥0)个结点的有限集T,T为 空时称为空树,否则它满足如下两个条件: (1)有且仅有一个特定的称为根(Root)的结点; (2)其余的结点可分为m(m≥0)个互不相交的有限子集Tl ,T2,…,Tm,其中每个子集本身又是一棵树,并称 其为根的子树(Subtree)。 注意:树的递归定义刻画了树的固有特性:一棵非空 树是由若干棵子树构成的,而子树又可由若干棵更小的
⑤点。内它树部们,结都而点是T:12B的除的根根子F结树又点。有之显两外然H棵的T互11分不是支相只结交含点的一统子个称树根为{结I}内和点部{EJ结的},
⑥开其始本结身点又:都根是结只点含又一称个为根开结始点结的点树。。
6
第3页/共47页
2)例结如点:之间的关系
A 第1层
①孩子结点:树中某个结点B 的子C 树的根D 称为第2层该结点的
数据结构课件第4章问题
if (root->LChild==NULL)
{ root->Ltag=1; root->LChile=pre; } / /置前驱线索 if (pre! =NULL&& pre->RChild==NULL)
{ pre-> Rtag=1; pre-> RChild=root; } // 置后继线索
任意一棵二叉树T,若叶结点数为n0,而度为2的结点数为n2,
n0与n2的关系?
性质3: 对任意一棵二叉树T,若叶结点数为n0,而其度为2的 结点数为n2,则n0=n2+1。
5、满二叉树?
满二叉树:深度为k的二叉树,如有2k-1个结点则称为满二 叉树;
A B D E F
K=3的满二叉树
C G
14、遍历的应用实例?
求二叉树的叶子结点个数的算法? 输出二叉树中的叶子结点? 求 二叉树高度?
例1 求二叉树的叶子结点个数的算法 输入:二叉树的二叉链表 结果:二叉树的叶子结点个数
与先序遍历算法比较一下!
void leaf (struct bitnode *root) //采用二叉链表存贮二叉树,n为全局变量,用于累加二叉树的叶子结点的个数。
12 对下图所示的二叉树, 其先序、 中序、 后序遍历的序列?
A B D F G C E H
其先序、 中序 D、 F、 G、 C、 E、 H 。 中序遍历: B、 F、 D、 G、 A、 C、 E、 H 。 后序遍历: F、 G、 D、 B、 H、 E、 C、 A 。
(d) 后序线索 二叉 树
16、线索二叉树类型定义?
P133-134
17、二叉树的中序遍历线索化 ?
对root所指的二叉树进行中序线索化, 其中pre始终指向刚 访问过的结点, 初值为NULL, root 为正访问的结点 方法:若二叉树非空
数据结构(C语言版)(第2版)课后习题答案
数据结构(C语言版)(第2版)课后习题答案数据结构(C语言版)(第2版)课后习题答案1. 简介数据结构是计算机科学领域中非常重要的一门学科,它研究的是数据的组织、存储和管理方式。
本文将针对《数据结构(C语言版)(第2版)》的课后习题提供答案,帮助读者更好地理解和应用数据结构。
2. 第一章: 绪论在第一章中,主要介绍了数据结构的基本概念、分类和基本操作。
以下是部分习题的答案:2.1 习题1习题描述:什么是数据结构?答案:数据结构是指数据对象中元素之间的关系,以及对这些关系进行操作的方法和技术的集合。
2.2 习题2习题描述:数据结构的分类有哪些?答案:数据结构可以分为线性结构和非线性结构。
线性结构包括线性表、栈、队列等;非线性结构包括树、图等。
3. 第二章: 线性表第二章介绍了线性表的定义、分类和实现。
以下是部分习题的答案:3.1 习题1习题描述:什么是线性表?答案:线性表是由n个数据元素a1, a2, ..., an组成的有限序列,其中元素之间存在着一一对应的关系。
3.2 习题2习题描述:线性表的分类有哪些?答案:线性表可以分为顺序表和链表。
顺序表是用一段地址连续的存储单元一次存储线性表的所有元素,而链表是采用链式存储结构,通过每个元素存储其后继元素的地址来实现元素之间的逻辑关系。
4. 第三章: 栈与队列第三章讲解了栈和队列的定义、特性和实现。
以下是部分习题的答案:4.1 习题1习题描述:栈和队列有什么区别?答案:栈是一种后进先出的线性表,只能在表尾进行插入和删除操作;队列是一种先进先出的线性表,只能在表的一端进行插入和删除操作。
4.2 习题2习题描述:栈的应用有哪些?答案:栈在计算机科学中有广泛的应用,如函数的调用和返回、括号匹配、表达式求值等。
5. 第四章: 串第四章讲解了串的定义、模式匹配和实现。
以下是部分习题的答案:5.1 习题1习题描述:什么是串?答案:串是由零个或多个字符组成的有限序列,串中的字符个数称为串的长度。
数据结构课后习题及解析第四章
第四章习题1. 设s=’I AM A STUDENT’, t=’GOOD’, q=’WORKER’。
给出下列操作的结果:StrLength(s); SubString(sub1,s,1,7); SubString(sub2,s,7,1);StrIndex(s,’A’,4); StrReplace(s,’STUDENT’,q);StrCat(StrCat(sub1,t), StrCat(sub2,q));2. 编写算法,实现串的基本操作StrReplace(S,T,V)。
3. 假设以块链结构表示串,块的大小为1,且附设头结点。
试编写算法,实现串的下列基本操作:StrAsign(S,chars); StrCopy(S,T); StrCompare(S,T); StrLength(S);StrCat(S,T); SubString(Sub,S,pos,len)。
4.叙述以下每对术语的区别:空串和空格串;串变量和串常量;主串和子串;串变量的名字和串变量的值。
5.已知:S=”(xyz)*”,T=”(x+z)*y”。
试利用联接、求子串和置换等操作,将S转换为T.6.S和T是用结点大小为1的单链表存储的两个串,设计一个算法将串S中首次与T匹配的子串逆置。
7.S是用结点大小为4的单链表存储的串,分别编写算法在第k个字符后插入串T,及从第k个字符删除len个字符。
以下算法用定长顺序串:8.编写下列算法:(1)将顺序串r中所有值为ch1的字符换成ch2的字符。
(2)将顺序串r中所有字符按照相反的次序仍存放在r中。
(3)从顺序串r中删除其值等于ch的所有字符。
(4)从顺序串r1中第index 个字符起求出首次与串r2相同的子串的起始位置。
(5)从顺序串r中删除所有与串r1相同的子串。
9.写一个函数将顺序串s1中的第i个字符到第j个字符之间的字符用s2串替换。
10.写算法,实现顺序串的基本操作StrCompare(s,t)。
数据结构第四章参考答案
习题41. 填空题(1)一般来说,数组不执行(___________)和(___________)操作,所以通常采用(___________)方法来存储数组。
通常有两种存储方式:(___________)和(___________)。
答案:删除 插入 顺序存储 行优先存储 列优先存储(2)设8行8列的二维数组起始元素为A[0][0],按行优先存储到起始元素下标为0的一维数组B 中,则元素B[23]在原二维数组中为(___________)。
若该二维数组为上三角矩阵,按行优先压缩存储上三角元素到起始元素下标为0的一维数组C 中,则元素C[23]即为原矩阵中的(___________)元素。
答案:A[2][7] A[3][5](3)设二维数组A 为6行8列,按行优先存储,每个元素占6字节,存储器按字节编址。
已知A 的起始存储地址为1000H ,数组A 占用的存储空间大小为(___________)字节,数组A 的最后一个元素的下标为(___________),该元素的第一个字节地址为(___________)H ,元素A[1][4]的第一个字节的地址为(___________)H 。
(提示:下标从0开始计) 答案:288 A[5][7] 111AH 1048H(4)设C++中存储三维数组A mnp ,则第一个元素为a 000,若按行优先存储,则a ijk 前面共有(___________)个元素;若按列优先存储,则a ijk 前面共有(___________)个元素。
答案:inp+jp+k i+mj+mnk(5)常见的稀疏矩阵压缩方法有:(___________)和(___________)。
答案:三元组表 十字链表 (6)广义表((a ),((b ,c ),d ),(e ))的长度为(___________),表头为(___________),表尾为(___________)。
答案:3 (a ) (((b ,c ),d ),(e )) (7)设广义表LS =((a ),((b ,c ),d ),(e )),若用取表头操作GetHead ()和取表尾操作GetTail ()进行组合操作,则取出元素b 的运算为(___________)。
数据结构课后习题答案第四章
第四章串一、单项选择题1.B2. B3.B4.C5. C二、填空题1.空、字符2.由空格字符(ASCII值32)所组成的字符串空格个数3.长度、相等、子、主4.55.011223126.(1)char s[ ] (2) j++ (3) i >= j7.[题目分析]本题算法采用顺序存储结构求串s和串t的最大公共子串。
串s用i指针(1<=i<=s.len)。
t串用j指针(1<=j<=t.len)。
算法思想是对每个i(1<=i<=s.len,即程序中第一个WHILE循环),来求从i开始的连续字符串与从j(1<=j<=t.len,即程序中第二个WHILE循环)开始的连续字符串的最大匹配。
程序中第三个(即最内层)的WHILE循环,是当s中某字符(s[i])与t中某字符(t[j])相等时,求出局部公共子串。
若该子串长度大于已求出的最长公共子串(初始为0),则最长公共子串的长度要修改。
(1) i+k<=s.len && j+k<=t.len && s[i+k]==t[j+k] //所有注释同上(a)(2) con=0 (3) j+=k (4) j++ (5) i++三、应用题1.空格是一个字符,其ASCII码值是32。
空格串是由空格组成的串,其长度等于空格的个数。
空串是不含任何字符的串,即空串的长度是零。
2.(a)A+B “ mule”(b)B+A “mule ”(c)D+C+B “myoldmule”(d)SUBSTR(B,3,2) “le”(e)SUBSTR(C,1,0) “”(f)LENGTH(A) 2(g)LENGTH(D) 2(h)INDEX(B,D) 0(i)INDEX(C,”d”) 3(j)INSERT(D,2,C) “myold”(k)INSERT(B,1,A) “m ule”(l)DELETE(B,2,2) “me”(m)DELETE(B,2,0) “mule”3.朴素的模式匹配(Brute-Force)时间复杂度是O(m*n),KMP算法有一定改进,时间复杂度达到O(m+n)。
《数据结构课件、代码》第4章 树和二叉树
ppt课件
9
注意二:二叉叉树树或是为有空序树树, 或,它是的由子一树个有根左结右点之加分上。两
棵二分叉别树称的为度左数子不树超和过右二子,但树度的数、不互超不过交二的的二树叉
树未组必成是。二叉树。
根结点
A
右子树
B
E
左子树
C D
ppt课件
F G
HK
10
二叉树的五种基本形态:
空树
只含根结点
N
右子树为空树 左子树为空树
树根
T1
T2 ppt课件
T3
3
2. 树的表示法:
(1). 树型图示 (2).嵌套集合 (3).凹入(书目) (4). 广义表(用根作为表的名字写在表的左边)
KE B A
L
F
D MH J
I GC
ppt课件
A -----------B ---------E -------K -----L -----F -------C ---------G -------D ---------H -------M -----I --------
20+21+ +2k-1 = 2k-1
ppt课件
13
性质 3 :
对任何一棵二叉树,若它含有n0 个叶子结点、n2 个 度为 2 的结点, 则必存在关系式:n0 = n2+1。
证明:
也可以用归纳法证明
设 二叉树上结点总数: n = n0 + n1 + n2
再根据树的性质:
b = n-1 = n0 + n1 + n2 - 1
N
N
左右子 树均非
空树
N
L
数据结构课后题答案(第4章).
数据结构部分课后习题答案第四章4.1广度优先生成树(黑体加粗边:深度拓扑排序序列:v0-v2-v3-v1-v4 4.2广度深度(1(2加边顺序a-b b-e e-d d-f f-c4.3、如图所示为一个有6个顶点{u1,u2,u3,u4,u5,u6}的带权有向图的邻接矩阵。
根据此邻接矩阵画出相应的带权有向图,利用dijkstra 算法求第一个顶点u1到其余各顶点的最短路径,并给出计算过程。
带权有向图:4.4证明在图中边权为负时Dijkstra算法不能正确运行若允许边上带有负权值,有可能出现当与S(已求得最短路径的顶点集,归入S内的结点的最短路径不再变更内某点(记为a以负边相连的点(记为b确定其最短路径时,它的最短路径长度加上这条负边的权值结果小于a原先确定的最短路径长度,而此时a在Dijkstra算法下是无法更新的。
4.5P.198 图中的权值有负值不会影响prim和kruskal的正确性如图:KRUSKAL求解过程:4.6 Dijkstra算法如何应用到无向图?答:Dijkstra算法通常是运用在带非负权值的有向图中,但是无向图其实就是两点之间两条有向边权值相同的特殊的有向图,这样就能将Dijkstra算法运用到无向图中。
4.7用FLOYD算法求出任意两顶点的最短路径(如图A(6所示。
A(0= A(1= A(2=A(3= A(4=A(5= A(6= V1 到 V2、V3、V4、V5、V6 往返路径长度分别为 5,9,5,9,9,最长为 9,总的往返路程为 37 同理 V2 到 V1、V3、V4、V5、V6 分别为 5,8,4,4,13,最长为 13,总和 34 V3 对应分别为 9,8,12,8,9,最长为 12,总和为 46 V4 对应分别为 5,4,12,4,9,最长为 12,总和为 34 V5 对应分别为9,4,8,4,9,最长为 9,总和为 34 V6 对应分别为 9,13,9,9,9,最长为13,总和为 49 题目要求娱乐中心“距其它各结点的最长往返路程最短” ,结点V1, V5 最长往返路径最短都是 9。
【优质】数据结构 树习题课PPT资料
树和二叉树最主要的区别是:二叉树中结点的子树要区分左子树和右字树,即使在结点只有一棵子树的情况下也要明确指出该子树是
左子树还是右子树.
n]顺序存储完全二叉树的各节点,则当i<=(n-1)/2时, 节点A[i]的右孩子是 节点______________。
12、在完全二叉树中,若一个节点只有一个子节点,则它没
11、在二叉树节点的先序序列、中序序列和后序序列中,所有叶子节点的先后顺序
B)孩子兄弟表示法 A)都不相同
B)先序和中序相同,而与后序不同
不是,只能所示一种分类而已
D)顺序存储表示法
【答案】 11、C 12、C 13、D
例题讲解
14、在树中,一个节点的直接子节点的个数称为该节点 的__度___ 。
(3) 二叉树的前序序列与后序序列相同: 空树或只有根节点的二叉树。
15、如果对于给定的一组权值,所构造出的二叉树的带权路径
编码,则C的编码为 : (分析)
的_____ 。
(3)度为2的有序树是一棵二叉树。
而具有3个节点的二叉树有5种形态,如图2所示。
树的后跟序列 = 对应二叉树中序序列
7、某二叉树节点的对称序(中序)序列为ABCDEFG,后序序
15、如果对于给定的一组权值,所构造出的二叉树的带权路径 长度最小,则该树称为_哈__夫__曼__树__(_H__u_f_f_m__a_n_)__ 。
16、用数组A[1..n]顺序存储完全二叉树的各节点,则当i<=(n1)/2时, 节点A[i]的右孩子是 节点__A_[_2_i_+_1__]_____。 17、完全二叉树中某节点无左子树,则它必是_叶__子________。
例题讲解
9、分别画出具有3个节点的树和具有3个节点的二叉树的所 有不同形态。并判断下列论述是否正确,为什么?
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(8)在Huffman树中,若编码长度只允许小于等于4,则除了已
对两个字符编码为0和10外,还可最大对 4 个字符编码。
(9)设高度为h(h≥1)的二叉树中,若设二叉树只有度为0和
度为2的结点,则二叉树中所含结点个数至少 2h-1 个。
(10)设森林F中有4棵树,第1,2,3,4棵树的结点个数分别 为n1,n2,n3,n4,当把该森林F转换成一棵二叉树后,其根结点的
if(!t->leftChild && !t->rightChild) return 1;
return Degrees0(t->leftChild)+Degrees0(t->rightChild); }或 void Degrees0(BinTreeNode *t,&count) {
if (t) {
if(!t->leftChild && !t->rightChild) count++;
2、如一棵树有n1个度为1的结点,有n2个度为2的 结点,……, nm个度为m的结点,试问有多少个度 为0的结点?
解:n=n0+n1+n2+…+nm n-1=n1+2*n2+…+mnm 化简:n=1+n2+2n3+…+(m-1)nm
m
=1+ (i 1)ni i2
12
3、试分别找出满足下列条件的所有二叉树: (1)二叉树的前序遍历与中序遍历相同; (2)二叉树的中序遍历与后序遍历相同; (3)二叉树的前序遍历与后序遍历相同;
5
一、填空题
(4)在一棵二叉树中,若度为2的结点数有5个,度为1 的结点数
有6个,那么度为0的结点数有 6 个?
(5)在一棵三叉树中,若度为3的结点数有2个,度为2的结点数
有1个,度为1 的结点数有2个,那么度为0的结点数有 6 个? (4) n=n0+n1+n2=n0+5+6=e+1=2*5+1*6+1 => n0=6 (5) n=n0+n1+n2+n3=n0+2+1+2=e+1=3*2+2*1+1*2+1
}
3
4-14.将图4.25中的树转换成二叉树。然后对树和转 换成的二叉树分别进行适当的遍历,并加以对比。
A
B
C
D
E
F
G
H
I
J
K
L
M
图4.25 树
4
一、填空题
(1)对于一棵具有n个结点的树,该树中所有结点度数之和为 n-1 。
(2) k叉树上的i层最大有 ki-1 个结点。
(3) 高度为h的k叉树最多有
第四章 树与二叉树 习题课
1
作业:p125 4-1 (省略) 4-3 有m个叶子的二叉树最少有多少个结点? 4-4 现有按后序遍历二叉树的结果为C,B,A,有
几种不同的二叉树可得到这一结果?
A
B C
2
4-10 设计一个算法,将一个用二叉链表存储的二 叉树的每个结点的左、右子女位置交换。
void Change (BinTreeNode *t) { if (!t) return 0; if(t->leftChild||t->rightChild) { p= t->leftChild; t->leftChild= t->rightChild; t->rightChild=p; }
a1 (qh 1) 1 (k h 1) k h 1
q1
k1 k1
个结点。
n个结点的k叉树的最小高度为
log n(k 1)1 k
。
假定一棵三叉树的结点个数为50,则它的最小高度为 log1301 最大高度为 50 。
一棵高度为5的满二叉树中的结点数为 25-1 。 一棵高度为3的满四叉树中的结点数为 (43-1)/3 。
9
二、对二叉树递归算法的理解
void Preorder(BinTree *r) { void Preorder(BinTree *r) {
// 前序遍历的递归算法
// 消去前序遍历第二个递归调用
if(r) {
while(r) {
cout<<r->data;
cout<<r->data;
② Preorder(r->leftChild);
while(p) { cout <<p->data; s.Push(p); p=p->leftChild; }
if(!s.IsEmpty()){ p=s.Pop();p=p->rightChild;
}//if }//while }// lnOrderTraverse
11
1、3个结点的树和二叉树个共有多少不同形态? 树有2种,二叉树有5种。
Preorder(r->leftChild);
① Preorder(r->rightChild);
r=r->rightChild;
}
A
E
10
非递归的前序遍历算法:
void PreOrderTraverse(BinaryTreeNode *r){ Stack s; s.InitStack();p=r; while(p || !s.IsEmpty()){
=> n0=6
6
(6)若对一棵二叉树从0开始进行结点编号, 并按此编号把它顺序
存储到一维数组a中,则a[i]元素的左子女结点编号为 2i+1 , i 1
右子女结点编号为 2i+2 ,双亲结点编号为 2 。
(7)对于一棵具有n个结点的二叉树的二叉链表中,指针总数为
为 2n ,其中 n-1 个指针指向子女结点, n+1 指针空闲。
(1) 空二叉树或左子树为空的二叉树。 (2) 空二叉树或右子树为空的二叉树。 (3) 空二叉树或只有根结点的二叉树。
13
四、设二叉树以二叉链表表示,试编写有关二叉树的递归算法。 1. 统计二叉树中叶结点的个数。
int Degrees0(BinTreeNode *t) {
if (!t) return 0;
左子树有 n1 个结点,右子树有 n2+n3+n4 个结点。
8
二、判断题
(11) 二叉树是树的特殊情形。 × (12) 若有一个结点是二叉树中某个子树的中序遍历结 果序列的最后一个结点,则它一定是该子树的前序遍 历结果序列的最后一个结点。 × (13) 若有一个叶结点是二叉树中某个子树的中序遍历 结果序列的最后一个结点,则它一定是该子树的前序 遍历结果序列的最后一个结点。× (14) 若有一个叶结点是二叉树中某个子树的前序遍历 结果序列的最后一个结点,则它一定是该子树的中序 遍历结果序列的最后一个结点。 ×