数据结构练习4二叉树Word格式文档下载.docx

上传人:b****3 文档编号:18462973 上传时间:2022-12-16 格式:DOCX 页数:6 大小:16.89KB
下载 相关 举报
数据结构练习4二叉树Word格式文档下载.docx_第1页
第1页 / 共6页
数据结构练习4二叉树Word格式文档下载.docx_第2页
第2页 / 共6页
数据结构练习4二叉树Word格式文档下载.docx_第3页
第3页 / 共6页
数据结构练习4二叉树Word格式文档下载.docx_第4页
第4页 / 共6页
数据结构练习4二叉树Word格式文档下载.docx_第5页
第5页 / 共6页
点击查看更多>>
下载资源
资源描述

数据结构练习4二叉树Word格式文档下载.docx

《数据结构练习4二叉树Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《数据结构练习4二叉树Word格式文档下载.docx(6页珍藏版)》请在冰豆网上搜索。

数据结构练习4二叉树Word格式文档下载.docx

(A)50(B)99(C)100(D)101

7.设二叉树的深度为h,且只有度为1和0的结点,则此二叉树的结点总数为C。

(A)2h(B)2h-1(C)h(D)h+1

8.对一棵满二叉树,m个树叶,n个结点,深度为h,则D。

(A)n=h+m(B)h+m=2n(C)m=h-1(D)n=2h-1

9.某二叉树的先序序列和后序序列正好相反,则下列说法错误的是A。

(A)二叉树不存在

(B)若二叉树不为空,则二叉树的深度等于结点数

(C)若二叉树不为空,则任一结点不能同时拥有左孩子和右孩子

(D)若二叉树不为空,则任一结点的度均为1

10.对二叉树的结点从1开始进行编号,要求每个结点的编号大于其左右孩子的编号,同一结点的左右孩子中,其左孩子的编号小于其右孩子的编号,可采用C遍历实现编号。

(A)先序(B)中序(C)后序(D)层序

11.一个具有1025个结点的二叉树的高h为C。

(A)10(B)11(C)11~1025(D)10~1024

12.设n,m为一棵二叉树上的两个结点,在中序遍历时,n在m前的条件是C。

(A)n在m右方(B)n是m祖先

(C)n在m左方(D)n是m子孙

13.实现对任意二叉树的后序遍历的非递归算法而不使用栈结构,最佳方案是二叉树采用C存储结构。

(A)二叉链表(B)广义表(C)三叉链表(D)顺序

14.一棵树可转换成为与其对应的二叉树,则下面叙述正确的是A。

(A)树的先根遍历序列与其对应的二叉树的先序遍历相同

(B)树的后根遍历序列与其对应的二叉树的后序遍历相同

(C)树的先根遍历序列与其对应的二叉树的中序遍历相同

(D)以上都不对

二、填空题

1.对一棵具有n个结点的二叉树,当它为一棵完全二叉树时具有最小高度;

当它为单分支时,具有最大高度。

2.在二叉树的第i(i≥1)层上至多有2i-1个结点,深度为k(k≥1)的完全二叉树至多2k-1个结点,最少2k-1个结点;

3.如果二叉树的终端结点数为n0,度为2的结点数为n2,则n0n2+1。

4.已知一棵二叉树的中序序列是cbedahgijf,后序序列是cedbhjigfa,则该二叉树的先序序列是abcdefghij,该二叉树的深度为5。

5.若一棵二叉树的中序遍历结果为ABC,则该二叉树有5中不同的形态。

6.在顺序存储的二叉树中,下标为i和j的两个结点处在同一层的条件是log2i=log2j。

7.已知完全二叉树的第7层有8个结点,则其叶子结点数为36个。

总结点数为71个。

8.在对二叉树进行非递归中序遍历过程中,需要用栈来暂存所访问结点的地址;

进行层序遍历过程中,需要用队列来暂存所访问结点的地址;

9.高度为h,度为k的树中至少有h+k-1个结点,至多有(kn-1)/(k-1)个结点。

10.一维数组存放完全二叉树:

ABCDEFGHI,则后序遍历该二叉树的序列为HIDEBFGCA。

三、应用题

1.应用题:

说明分别满足下列条件的二叉树各是什么?

⑴先序遍历和中序遍历相同;

⑵中序遍历和后序遍历相同;

(3)先序遍历和后序遍历相同;

思考:

TLR、LTR、LRT

(1)空树、只有根结点、右单分支二叉树;

(2)空树、只有根结点、左单分支二叉树

(3)空树、只有根结点

2.已知一棵二叉树的中序序列是cbedahgijf,后序序列是cedbhjigfa,画出这棵二叉树的逻辑结构图。

3.一棵二叉树的先序、中序、后序序列如下,其中一部分未标出,试构造出该二叉树。

先序序列:

ABCDEFGHIJK

中序序列:

CBEDFAHJKIG

后序序列:

CEFDBKJIHGA

4.有n个结点的二叉树,已知叶子结点个数为n0,回答下列问题:

(1)写出求度为1的结点的个数n1的计算公式;

(2)若此树是深度为k的完全二叉树,写出n为最小的公式;

(3)若二叉树中仅有度为0和度为2的结点,写出求该二叉树结点个数n的公式;

(1)记度为2的结点个数为n2,则n=n0+n1+n2,另一方面,除了根结点以外,其余结点均有父结点的分支射出,所以结点数n=1+n1+2*n2;

综合上面两式可得n1=n+1-2n0。

(2)当树是深度为k的完全二叉树时,n的最小值nmin=2k-1;

(3)当二叉树中仅有度为0和2的结点时,二叉树的结点个数n=2n0-1。

四、算法设计题

1.编写求二叉树BT中结点总数的算法。

intBTreeCount(BTreeNode*BT){//二叉树中结点的总数

if(BT==NULL)

return0;

elseif(BT->

left==NULL&

&

BT->

right==NULL)

return1;

else

returnBTreeCount(BT->

left)+BTreeCount(BT->

right)+1;

}

2.编写求二叉树BT中叶子结点数的算法。

intBTreeCount(BTreeNode*BT)//二叉树中结点的总数

{

right);

3.若已知两棵二叉树BT1和BT2皆为空,或者皆不为空且BT1的左、右子树和BT2的左、右子树分别相似,则称二叉树BT1和BT2相似。

编写算法,判别给定的两棵二叉树是否相似。

intBTreeSim(BTreeNode*BT1,BTreeNode*BT2)//判断两棵二叉树是否相似

if(!

BT1&

!

BT2)return1;

elseif(!

BT1||!

BT2)return0;

returnBTreeSim(BT1->

lchild,BT2->

lchile)&

BTreeSim(BT1->

rchild,BT2->

rchild);

4.编写算法,求二叉树中以元素值为x的结点为根的子树的深度。

intGet_Sub_Depth(BTreeNode*BT,ElemTypex)//值为x的结点为根的子树的深度

BT)return0;

data==x)returnDepthBTree(BT);

lchild!

=NULL)returnGet_Sub_Depth(BT->

lchild,x);

rchild!

rchild,x);

elsereturn0;

intDepthBTree(BTreeNode*BT){//求二叉树BT的深度

//空树深度为0

else{

intdep1=DepthBTree(BT->

lchiid);

//先求根结点左子树的深度

intdep2=DepthBTree(BT->

//再求根结点右子树的深度

if(dep1>

dep2)//返回最大值,并加上根结点这一层

returndep1+1;

returndep2+1;

5.编写算法,计算二叉树中度为1的结点数和度为2的结点数。

ints1=0,s2=0;

voidBTreebranch(BTreeNode*BT){

if(BT!

=NULL){

if(BT->

=NULL)s2++;

elses1++;

BTreebranch(BT->

lchild);

=NULL)s1++;

6.试利用栈的基本操作编写一个先序遍历的非递归算法。

若二叉树非空,首先访问根结点并将其地址进栈,然后沿着左链遍历根结点的左子树。

若二叉树为空,则弹出栈顶元素,取得最近访问过的根结点地址,然后沿右链遍历根结点的右子树。

【算法源代码】

voidPreOrder(BTreeNode*BT){

InitStack(S);

Push(S,T);

while(!

StackEmpty(S)){

while(gettop(S,p)&

p){

visit(p->

data);

Push(S,p->

}//向左走到尽头

Pop(S,p);

//向右走一步

}//while

 

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

当前位置:首页 > 外语学习 > 法语学习

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1