习题5 树和二叉树
树和二叉树习题集与答案解析

一、填空题1. 不相交的树的聚集称之为森林。
2. 从概念上讲,树与二叉树是两种不同的数据结构,将树转化为二叉树的基本目的是_树可采用孩子-兄弟链表(二叉链表)做存储结构,目的是利用二叉树的已有算法解决树的有关问题。
3. 深度为k的完全二叉树至少有2 k-1个结点。
至多有2 k-1个结点,若按自上而下,从左到右次序给结点编号(从1开始),则编号最小的叶子结点的编号是2 k-2+1。
4. 在一棵二叉树中,度为零的结点的个数为n 0,度为2的结点的个数为n 2,则有n0= n2+1。
5. 一棵二叉树的第i(i≥1)层最多有2 i-1个结点;一棵有n(n>0)个结点的满二叉树共有(n+1)/2个叶子和(n-1)/2个非终端结点。
6.现有按中序遍历二叉树的结果为abc,问有5种不同形态的二叉树可以得到这一遍历结果。
7. 哈夫曼树是带权路径最小的二叉树。
8. 前缀编码是指任一个字符的编码都不是另一个字符编码的前缀的一种编码方法,是设计不等长编码的前提。
9. 以给定的数据集合{4,5,6,7,10,12,18}为结点权值构造的Huffman 树的加权路径长度是165 。
10. 树被定义为连通而不具有回路的(无向)图。
11. 若一棵根树的每个结点最多只有两个孩子,且孩子又有左、右之分,次序不能颠倒,则称此根树为二叉树。
12. 高度为k,且有个结点的二叉树称为二叉树。
2k-1 满13. 带权路径长度最小的二叉树称为最优二叉树,它又被称为树。
Huffman14. 在一棵根树中,树根是为零的结点,而为零的结点是结点。
入度出度树叶15. Huffman树中,结点的带权路径长度是指由到之间的路径长度与结点权值的乘积。
结点树根16. 满二叉树是指高度为k,且有个结点的二叉树。
二叉树的每一层i上,最多有个结点。
2k-1 2i-1二、单选题1. 具有10个叶结点的二叉树中有(B) 个度为2的结点。
(A)8 (B)9 (C)10 (D)112.对二叉树的结点从1开始进行连续编号,要求每个结点的编号大于其左右孩子的编号,同一结点的左右孩子中,其左孩子的编号小于其右孩子的编号,则可采用_(3)次序的遍历实现编号。
计算机数据结构习题1附答案

文档来源为:从网络收集整理.word 版本可编辑.欢迎下载支持.第1章 绪论1.1 简述下列术语:数据,数据元素、数据对象、数据结构、存储结构、数据类型和抽象数据类型。
解:数据是对客观事物的符号表示。
在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称。
数据元素是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。
数据对象是性质相同的数据元素的集合,是数据的一个子集。
数据结构是相互之间存在一种或多种特定关系的数据元素的集合。
存储结构是数据结构在计算机中的表示。
数据类型是一个值的集合和定义在这个值集上的一组操作的总称。
抽象数据类型是指一个数学模型以及定义在该模型上的一组操作。
是对一般数据类型的扩展。
1.2 填空题:1.常见的数据结构有__结构,_____结构,____结构等三种。
2.常见的存储结构有_________结构,______结构等两种。
3.数据的基本单位是____,它在计算机中是作为一个整体来处理的。
4.数据结构中的结构是指数据间的逻辑关系,常见的结构可分为两大类,______和_____。
5.《数据结构》课程讨论的主要内容是数据的逻辑结构、存储结构和________。
1.2设有数据结构(D,R),其中{}4,3,2,1d d d d D =,{}r R =,()()(){}4,3,3,2,2,1d d d d d d r =试按图论中图的画法惯例画出其逻辑结构图。
解:1.3设有以下三个函数:()10002124++=n n n f ,()3450015n n n g+=,()n n n n h log 5005.3+=请判断以下断言正确与否:(1) f(n)是O(g(n)) (2) h(n)是O(f(n)) (3) g(n)是O(h(n)) (4) h(n)是O(n 3.5) (5) h(n)是O(nlogn)解:(1)对 (2)错 (3)错 (4)对 (5)错第二章序列2.1 描述以下三个概念的区别:头指针,头结点,首元结点(第一个元素结点)。
第5章 树与二叉树习题参考答案【VIP专享】

2. 一棵具有 n 个结点的二叉树,其深度最多为 n ,最少为 [log2n]+1 。 3. 一棵具有 100 个结点的完全二叉树,其叶结点的个数为 50 。37 4. 以{5,9,12,13,20,30}为叶结点的权值所构造的哈夫曼树的带权路径长度是 217
对全部高中资料试卷电气设备,在安装过程中以及安装结束后进行高中资料试卷调整试验;通电检查所有设备高中资料电试力卷保相护互装作置用调与试相技互术关,通系电1,力过根保管据护线生高0不产中仅工资2艺料22高试2可中卷以资配解料置决试技吊卷术顶要是层求指配,机置对组不电在规气进范设行高备继中进电资行保料空护试载高卷与中问带资题负料2荷试2,下卷而高总且中体可资配保料置障试时2卷,32调需3各控要类试在管验最路;大习对限题设度到备内位进来。行确在调保管整机路使组敷其高设在中过正资程常料1工试中况卷,下安要与全加过,强度并看工且25作尽52下可22都能护可地1关以缩于正小管常故路工障高作高中;中资对资料于料试继试卷电卷连保破接护坏管进范口行围处整,理核或高对者中定对资值某料,些试审异卷核常弯与高扁校中度对资固图料定纸试盒,卷位编工置写况.复进保杂行护设自层备动防与处腐装理跨置,接高尤地中其线资要弯料避曲试免半卷错径调误标试高方中等案资,,料要编试求5写、卷技重电保术要气护交设设装底备备置。4高调、动管中试电作线资高气,敷料中课并设3试资件且、技卷料中拒管术试试调绝路中验卷试动敷包方技作设含案术,技线以来术槽及避、系免管统不架启必等动要多方高项案中方;资式对料,整试为套卷解启突决动然高过停中程机语中。文高因电中此气资,课料电件试力中卷高管电中壁气资薄设料、备试接进卷口行保不调护严试装等工置问作调题并试,且技合进术理行,利过要用关求管运电线行力敷高保设中护技资装术料置。试做线卷到缆技准敷术确设指灵原导活则。。:对对在于于分调差线试动盒过保处程护,中装当高置不中高同资中电料资压试料回卷试路技卷交术调叉问试时题技,,术应作是采为指用调发金试电属人机隔员一板,变进需压行要器隔在组开事在处前发理掌生;握内同图部一纸故线资障槽料时内、,设需强备要电制进回造行路厂外须家部同出电时具源切高高断中中习资资题料料电试试源卷卷,试切线验除缆报从敷告而设与采完相用毕关高,技中要术资进资料行料试检,卷查并主和且要检了保测解护处现装理场置。设。备高中资料试卷布置情况与有关高中资料试卷电气系统接线等情况,然后根据规范与规程规定,制定设备调试高中资料试卷方案。
数据结构课后习题(第6章)

【课后习题】第6章树和二叉树网络工程2010级()班学号:姓名:一、填空题(每空1分,共16分)1.从逻辑结构看,树是典型的。
2.设一棵完全二叉树具有999个结点,则此完全二叉树有个叶子结点,有个度为2的结点,有个度为1的结点。
3.由n个权值构成的哈夫曼树共有个结点。
4.在线索化二叉树中,T所指结点没有左子树的充要条件是。
5.在非空树上,_____没有直接前趋。
6.深度为k的二叉树最多有结点,最少有个结点。
7.若按层次顺序将一棵有n个结点的完全二叉树的所有结点从1到n编号,那么当i为且小于n时,结点i的右兄弟是结点,否则结点i没有右兄弟。
8.N个结点的二叉树采用二叉链表存放,共有空链域个数为。
9.一棵深度为7的满二叉树有___ ___个非终端结点。
10.将一棵树转换为二叉树表示后,该二叉树的根结点没有。
11.采用二叉树来表示树时,树的先根次序遍历结果与其对应的二叉树的遍历结果是一样的。
12.一棵Huffman树是带权路径长度最短的二叉树,权值的外结点离根较远。
二、判断题(如果正确,在对应位置打“√”,否则打“⨯”。
每题0.5分,共5分)1.对于一棵非空二叉树,它的根结点作为第一层,则它的第i层上最多能有2i-1个结点。
2.二叉树的前序遍历并不能唯一确定这棵树,但是,如果我们还知道该二叉树的根结点是那一个,则可以确定这棵二叉树。
3.一棵树中的叶子结点数一定等于与其对应的二叉树中的叶子结点数。
4.度≤2的树就是二叉树。
5.一棵Huffman树是带权路径长度最短的二叉树,权值较大的外结点离根较远。
6.采用二叉树来表示树时,树的先根次序遍历结果与其对应的二叉树的前序遍历结果是一样的。
7.不存在有偶数个结点的满二叉树。
8.满二叉树一定是完全二叉树,而完全二叉树不一定是满二叉树。
9.已知二叉树的前序遍历顺序和中序遍历顺序,可以惟一确定一棵二叉树;10.已知二叉树的前序遍历顺序和后序遍历顺序,不能惟一确定一棵二叉树;三、单项选择(请将正确答案的代号填写在下表对应题号下面。
数据结构树和二叉树习题(有答案)

E F D GAB/+ +* - C* 第六章树和二叉树一、选择题1.已知一算术表达式的中缀形式为 A+B*C-D/E ,后缀形式为ABC*+DE/-,其前缀形式为( )A .-A+B*C/DE B. -A+B*CD/E C .-+*ABC/DED. -+A*BC/DE【北京航空航天大学 1999 一、3 (2分)】2.算术表达式a+b*(c+d/e )转为后缀表达式后为()【中山大学 1999 一、5】A .ab+cde/*B .abcde/+*+C .abcde/*++ D.abcde*/++3. 设有一表示算术表达式的二叉树(见下图),它所表示的算术表达式是()【南京理工大学1999 一、20(2分)】A. A*B+C/(D*E)+(F-G)B. (A*B+C)/(D*E)+(F-G)C. (A*B+C)/(D*E+(F-G ))D. A*B+C/D*E+F-G4. 设树T 的度为4,其中度为1,2,3和4的结点个数分别为4,2,1,1 则T 中的叶子数为()A .5 B.6 C.7D .8【南京理工大学 2000 一、8 (1.5分)】5. 在下述结论中,正确的是()【南京理工大学 1999 一、4 (1分)】①只有一个结点的二叉树的度为0; ②二叉树的度为2;③二叉树的左右子树可任意交换;④深度为K 的完全二叉树的结点个数小于或等于深度相同的满二叉树。
A .①②③ B .②③④ C.②④D .①④6. 设森林F 对应的二叉树为B ,它有m 个结点,B 的根为p,p 的右子树结点个数为n,森林F中第一棵树的结点个数是()A .m-nB .m-n-1C .n+1D .条件不足,无法确定【南京理工大学2000 一、17(1.5分)】7. 树是结点的有限集合,它((1))根结点,记为T 。
其余结点分成为m (m>0)个((2))的集合T1,T2,…,Tm ,每个集合又都是树,此时结点T 称为Ti 的父结点,Ti 称为T 的子结点(1≤i ≤m )。
数据结构二叉树习题含答案

第 6 章树和二叉树1.选择题( 1)把一棵树变换为二叉树后,这棵二叉树的形态是()。
A.独一的B.有多种C.有多种,但根结点都没有左孩子D.有多种,但根结点都没有右孩子( 2)由 3 个结点能够结构出多少种不一样的二叉树?()A. 2 B . 3 C . 4 D. 5( 3)一棵完整二叉树上有1001 个结点,此中叶子结点的个数是()。
A. 250 B . 500 C . 254 D. 501( 4)一个拥有 1025 个结点的二叉树的高h 为()。
A. 11 B . 10 C.11 至 1025 之间 D .10 至 1024 之间( 5)深度为 h 的满 m叉树的第 k 层有()个结点。
(1=<k=<h)k-1B kCh-1 hA. m . m-1 . m D.m-1( 6)利用二叉链表储存树,则根结点的右指针是()。
A.指向最左孩子 B .指向最右孩子 C .空 D .非空( 7)对二叉树的结点从 1 开始进行连续编号,要求每个结点的编号大于其左、右孩子的编号,同一结点的左右孩子中,其左孩子的编号小于其右孩子的编号,可采纳()遍历实现编号。
A.先序 B. 中序 C. 后序 D.从根开始按层次遍历(8)若二叉树采纳二叉链表储存结构,要互换其全部分支结点左、右子树的地点,利用()遍历方法最适合。
A.前序B.中序C.后序D.按层次(9)在以下储存形式中,()不是树的储存形式?A.双亲表示法 B .孩子链表表示法 C .孩子兄弟表示法D.次序储存表示法( 10)一棵非空的二叉树的先序遍历序列与后序遍历序列正好相反,则该二叉树必定满足()。
A.全部的结点均无左孩子B.全部的结点均无右孩子C.只有一个叶子结点D.是随意一棵二叉树( 11)某二叉树的前序序列和后序序列正好相反,则该二叉树必定是()的二叉树。
A.空或只有一个结点B.任一结点无左子树C.高度等于其结点数 D .任一结点无右子树( 12)若 X 是二叉中序线索树中一个有左孩子的结点,且 X 不为根,则 X 的前驱为()。
树和二叉树习题及答案

树和二叉树习题及答案一、填空题1. 不相交的树的聚集称之为森林。
2. 从概念上讲,树与二叉树是两种不同的数据结构,将树转化为二叉树的基本目的是_树可采用孩子-兄弟链表(二叉链表)做存储结构,目的是利用二叉树的已有算法解决树的有关问题。
3. 深度为k的完全二叉树至少有2 k-1个结点。
至多有2 k-1个结点,若按自上而下,从左到右次序给结点编号(从1开始),则编号最小的叶子结点的编号是2 k-2+1。
4. 在一棵二叉树中,度为零的结点的个数为n,度为2的结点的个数为n2,则有n= n2+1。
5. 一棵二叉树的第i(i≥1)层最多有2 i-1个结点;一棵有n (n>0)个结点的满二叉树共有(n+1)/2个叶子和(n-1)/2个非终端结点。
6.现有按中序遍历二叉树的结果为abc,问有5种不同形态的二叉树可以得到这一遍历结果。
7. 哈夫曼树是带权路径最小的二叉树。
8. 前缀编码是指任一个字符的编码都不是另一个字符编码的前缀的一种编码方法,是设计不等长编码的前提。
9. 以给定的数据集合{4,5,6,7,10,12,18}为结点权值构造的Huffman树的加权路径长度是 165 。
10. 树被定义为连通而不具有回路的(无向)图。
11. 若一棵根树的每个结点最多只有两个孩子,且孩子又有左、右之分,次序不能颠倒,则称此根树为二叉树。
12. 高度为k,且有个结点的二叉树称为二叉树。
2k-1 满13. 带权路径长度最小的二叉树称为最优二叉树,它又被称为树。
Huffman14. 在一棵根树中,树根是为零的结点,而为零的结点是结点。
入度出度树叶15. Huffman树中,结点的带权路径长度是指由到之间的路径长度与结点权值的乘积。
结点树根16. 满二叉树是指高度为k,且有个结点的二叉树。
二叉树的每一层i上,最多有个结点。
2k-1 2i-1二、单选题1. 具有10个叶结点的二叉树中有 (B) 个度为2的结点。
(A)8 (B)9 (C)10 (D)112.对二叉树的结点从1开始进行连续编号,要求每个结点的编号大于其左右孩子的编号,同一结点的左右孩子中,其左孩子的编号小于其右孩子的编号,则可采用_(3)次序的遍历实现编号。
数据结构习题

树和二叉树习题(39)1.请编写一个判别给定二叉树是否为二叉排序树的算法,设二叉树用llink-rlink 法存储。
2.假设K1,…,Kn 是n 个关键词,试解答:(1) 试用二叉查找树的插入算法建立一棵二叉查找树,即当关键词的插入次序为K1,K2,…,Kn 时,用算法建立一棵以LLINK / RLINK 链接表示的二叉查找树。
(2) 设计一个算法,打印出该二叉查找树的嵌套括号表示结构。
例如,K1=B,K2=A,K3=D,K4=C,K5=E,则用二叉查找树的插入算法建立的二叉查找树为:该二叉查找树的嵌套括号表示结构为:B(A,D(C,E))3.写出在二叉排序树中删除一个结点的算法,使删除后仍为二叉排序树。
设删除结点由指针p 所指,其双亲结点由指针 f 所指,并假设被删除结点是其双亲结点的右孩子。
用类PASCAL(或C)语言将上述算法写为过程形式。
4. 已知二叉树排序树中某结点指针p,其双亲结点指针为fp,p 为fp 的左孩子,试编写算法,删除p 所指结点。
5.二叉排序树采用二叉链表存储。
写一个算法,删除结点值是X 的结点。
要求删除该结点后,此树仍然是一棵二叉排序树,并且高度没有增长(注:可不考虑被删除的结点是根的情况)。
6. 设记录R1,R2,…,Rn 按关键字值从小到大顺序存储在数组r[1..n]中,在r[n+1]处设立一个监督哨,其关键字值为+∞; 试写一查找给定关键字k 的算法;并画出此查找过程的判定树,求出在等概率情况下查找成功时的平均查找长度。
7.设计算法以求解编号为i和j的两个结点的最近的公共祖先结点的编号。
8.元素集合已存入整型数组A[1..n]中,试写出依次取A 中各值A[i](1<=i<=n)构造一棵二叉排序树T 的非递归算法:CSBT(T,A)9.写出折半查找的算法,并要求它返回整型值i,当查找成功时,返回查找位置,查找不成功时返回0。
10.请编写算法:键树,又称数字查找树。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(7) 任何一棵二叉树的叶子结点在前序、中序、后序遍历序 列中的相对次序( A )。 A. 肯定不发生改变 B.肯定发生改变 C.不能确定 D.有时发生变化
(8) 如果T'是由有序树T转换而来的二叉树,那么T中结点的 前序序列就是T'中结点的( A )序列,T中结点的后序序列 就是T'中结点的( B )序列。
(3) 设计算法求二叉树的深度.
解法四:用前序遍历算法, 在栈中设两个域,一个表示原遍历结点,一个 表示此结点的层数。 template <class T> void BiTree::DepthProOrder(BiNode<T> *rt) { top= -1; length=0; //采用顺序栈s,并假定不会发生上溢 while (rt!=NULL | | top!= -1) { while (rt!= NULL) //找此结点的最左边的后代 { s[++top].ptr=rt; //此结点进栈 s[top].depth=++length; rt=rt->lchild; //转移到左儿子子树 } #2 while if(length>depth) depth=length; if (top!= -1) { rt=s[top].ptr; length=s[top--].depth; rt=rt->rchild; } }//#1 while }
(4) 线索二叉树中某结点R没有左孩子的充要条件是( C )。 A. R.child=NULL B. R.ltag=0 C. R.ltag=1 D. R.child=NULL
(5) 深度为k的完全二叉树至少有( B )个结点,至多有( C ) 个结点。 A.2k-2+1 B.2k-1 C.2k-1 D.2k-1-1 (6) 一个高度为h的满二叉树共有n个结点,其中有m个叶子结 点,则有( D )成立。 A.n=h+m B.h+m=2n C.m=h-1 D.n=2m一1
(1) 设计算法求二叉树的结点个数.
其他解法一: int BiTree::count(BiNode<T> *rt) { if (rt ==NULL) return 0; else return count(rt->lchild)+count(rt->rchild)+1; } 其他解法二:用前序遍历的非递归算法 int BiTree::CountPreOrder(BiNode<T> *rt) {top= -1; p=rt; num=0;//采用顺序栈s,并假定不会发生上溢 while (p!=NULL | | top!= -1) { while (p!= NULL) //找此结点的最左边的后代 { num++; //访问 s[++top]=p; //此结点进栈 p=p->lchild; //转移到左儿子子树 } if (top!= -1) {p=s[top--]; p=p->rchild; }} return num; // cout<<num }
(3) 设计算法求二叉树的深度. 注:本算法也可以用二叉树遍历的所有算法。但是在用前 序和中序算法时要注意深度如何来确定。
解法一:
int BiTree::depth(BiNode<T> *rt) { if (rt ==NULL) return 0; else { hl= depth(rt->lchild); hr= depth(rt->rchild); return (hl>hr)?hl+1:hr+1; }
A B C E D G
F I
H
(5) 给出叶子结点的权值集合为 W={5,2,9,11, 8,3,7
2
9
11
8
15
7
5
3
5 算法设计
(1) 设计算法求二叉树的结点个数.
注:本算法可以用二叉树遍历的所有算法,只要把cout语句 换成结点的计数就可以了,但是要注意递归中的计数变量应 该是外部变量。如
4. 解答下列问题
(1) 证明:任何满二叉树的分支数B=2(n0-1). (2) 证明:已知一棵二叉树的前序序列和中序序列, 则可唯一确定该二叉树。 (3) 已知一棵度为m的树中:n1个度为1的结点,n2个度 为2的结点,„,nm个度为m的结点,问该树中共有多 少个叶子结点?
(4) 已知一棵二叉树的中序和后序序列为 CBEDAFIGH和CEDBIFHGA,试构造该二叉树。
A.前序
B.中序
C.后序
D.层序
(9) 设森林中有4棵树,树中结点的个数依次为n1, n2, n3, n4, 则把森林转换成二叉树后,其根结点的右子树上有( D ) 个结点。根结点的左子树上有( A )个结点。 A.n1-1 B.nl C.nl+n2+n3 D.n2+n3+n4
(10) 讨论树、森林和二叉树的关系,目的是为了( B )。 A.借助二叉树上的运算方法去实现对树的一些运算 B.将树、森林按二叉树的存储方式进行存储并利用二叉 树的算法解决树的有关问题 C. 将树、森林转换成二叉树 D.体现一种技巧,没有什么实际意义
int num=0; int BiTree::count(BiNode<T> *rt) { countsub(rt); return num; } void BiTree::countSub(BiNode<T> *rt) { if (rt !=NULL) { num++; countSub (rt->lchild); countSub (rt->rchild); } }
1 填空题(续) (5)深度为k的二叉树中,所含叶子的个数最多为(2k-1). (6)具有100个结点的完全二叉树的叶子结点数为(50)。 (7) 已知一棵度为3的树有2个度为1的结点,3个度为2 的结点,4个度为3的结点。则该树有(12)个叶子结点。 (8) 某二叉树的前序遍历序列是ABCDEFG,中序遍历序 列是CBDAFGE,则其后序遍历序列是( CDBGFEA )。 (9)在具有n个结点的二叉链表中,共有( 2n )个指 针域,其中( n-1 )个指针域用于指向其左右孩子, 剩下的( n+1 )个指针域则是空的。 (10)在有n个叶子的哈夫曼树中,叶子结点总数为(n), 分支结点总数为( n-1 )。
解法思想: 若根结点的值为x,则删除整个树;否则查找值为x 的结点的双亲p,然后删除此结点所对应的子树,同时修改p的 左(或右)孩子的指针。最好用前序遍历查找,后序遍历删除。
void BiTree::DeleteX(BiNode<T> *rt, T x) { if(rt!=NULL) { if(rt->data==x) {Release(rt); rt=NULL;} else{p=rt; top= -1; //采用顺序栈s,并假定不会发生上溢 while (p!=NULL | | top!= -1) { while (p!= NULL) //找此结点的最左边的后代 { s[++top]=p; //此结点进栈 if((p->lchild!=NULL )&&(p->lchild->data==x)) {Release(p->lchild); p->lchild=NULL;} if((p->rchild!=NULL )&&(p->rchild->data==x)) {Release(p->rchild); p->rchild=NULL;} p=p->lchild; } #2 while if (top!= -1) { p=s[top--]; p=p->rchild; } }//#1 while }}
1 填空题 (1)树是n(n≥0)个结点的有限集合。在一棵非空树 中,有(且仅有一个)根结点,其余结点分成m (m>=0)个(互不相交)的有限集合,每个集合又是一 棵树。 (2) 树中某结点的子树的个数称为该结点的( 度 ), 子树的根结点称为这个结点的( 孩子结点 ),该结点称 为其子树根结点的(双亲结点). (3) 一棵二叉树的第i(i≥1)层上最多有( 2i-1 )个结 点,一棵有n(n>0)个结点的满二叉树共有( (n+1)/2 ) 个叶子结点和( (n-1)/2 )个非终端结点。 (4) 设高度为h的二叉树只有度为0的和度为2的结点, 该二叉树的结点数可能达到的最大值是( 2h-1 ),最小 值是( 2 h -1 )。
(3) 设计算法求二叉树的深度.
解法三:用层序遍历算法, 设一个指针来表示目前遍历到 的层数,最底层就是此树的深度。 void BiTree::Depth(BiNode<T> *rt) { int depth=0, flag=0;//depth为树的深度,flag为当前遍历到的层数 front=rear=-1; //采用顺序队列,并假定不会发生上溢 if (rt!=NULL) { Q[++rear]=rt; // Q为队列 while (front!=rear) { q=Q[++front]; if (q->lchild!=NULL) Q[++rear]=q->lchild; if (q->rchild!=NULL) Q[++rear]=q->rchild; if(front==flag) {depth++; flag=rear;} }} cout<<depth; }
(6) 以二叉链表为存储结构,在二叉树中删除以值x为根结点 的子树. void BiTree::DeleteX(BiNode<T> *rt, T x) { if(rt==NULL) return; if(rt->data==x) {Release(rt);} else{ DeleteX(rt->lchild, x); DeleteX(rt->rchild, x); } }