树与二叉树练习题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
树与二叉树练习题(五)
习题2010-05-25 17:27:01 阅读134 评论0 字号:大中小订阅
1. 己知二叉树采用二叉链表方式存放,要求返回二叉树T的后序序列中的第一个结点的指针,是否可以不用递归且不用栈来完成?请说明原因。
2.具有n个结点的满二叉树的叶子结点的个数是多少?说明理由。
3.列出先序遍历能得到ABC序列的所有不同的二又树。
4.画出同时满足下列两个条件的两棵不同的二叉树:
(1) 按先序遍历二叉树顺序为ABCDE;
(2) 高度为5,其对应的树(森林)的高度最大为4。
5.对于表达式(a-b+c)*d/(e+f)
(1) 画出它的中序二叉树,并标出该二叉树的前序线索;
(2) 给出它的前缀表达式和后缀表达式。
6.试找出分别满足下列条件的所有二叉树:
(1) 先序序列和中序序列相同;
(2) 中序序列和后序序列相同;
(3) 先序序列和后序序列相同。
7. 阅读下列算法的描述,根据算法的要求,在相应的空格处写出正确合理的语句。后序遍历二叉树的非递归算法,bt是二叉树的根,S是一个栈,MaxSize是栈的最大容量。
typedef struct Node{
BTNode *[MaxSize+1];
int top;
} stacktyp;
void PostOrder(BTNode *bt)
{
BTNode *p, *q = bt;
stacktyp S;
int flag;
S.top = -1;
do{
while(q != NULL){
S.top++;
if(S.top > MaxSize){
printf("Stack Full!");
exit(0);
}
else
S.data[S.top] = q;
_______①_____;
}
flag = 1;
p = NULL;
while(S.top != -1 && flag){
q = S.data[S.top];
if(_________②__________){
printf(q->data);
S.to--;
p = q;
}
else {
_________③__________;
flag = 0;
}
}
}while(__________④__________);
}
8. 具有n个结点的完全二又树,已经顺序存储在一维数组A[n]中,下面算法是将A中顺序存储变成二叉链表存储的完全二又树。请在空缺处填入适当语句,以完成上述算法。
Elemtype A[n];
void CreatTree(BTNode *T, int i)
{
_________①_________;
T->data = A[i];
if(________②________)
CreatTree(_______③________);
else
r->lchild = NULL;
if(_________④_________)
CreatTree(_______⑤________);
else
r->rchild = NULL;
}
void BTree(ar a, BTNOde *p)
{
int j;
j = ________⑥__________;
CreatTree(p, j);
}
9. 二叉树采用二叉链表存储结构,试设计算法计算一棵给定二叉树的各结点的子孙个数。
10. 一棵具有n个结点的完全二叉树,以一维数组作为存储结构,试设计一个对该完全二叉树进行前序遍历的算法。
11. 已知一棵二叉树的前序遍历序列和中序遍历序列,编写算法建立对应的二叉树。
12. 编写一个算法,利用叶子结点中的空指针域,将所有叶子结点链接为一个带有头结点的单链表,算法返回头结点的地址。
字符串练习题(四)
习题2010-04-26 17:20:23 阅读138 评论0 字号:大中小订阅
1. 设s=‘I_AM_A_TEACHER’,其长度是_________________。
2.空串是______________,其长度等于________________。
3.设sl=‘GOOD’,s2=‘☆’,s3=‘BYE!’,则sl、s2和s3连接后的结果是________。
4.两个串相等的充分必要条件是___________________。
5.简述一个字符串中子串的构成。
★6. 设目标为s=’abcaabbabcabaacbacba’,模式p=’abcabaa’。
(1) 计算模式p的nextval函数值;
(2) 不写出算法,只画出利用KMP算法(采用next函数值)进行模式匹配时每一趟的匹配过程。
★7. 模式匹配算法是在主串中快速寻找模式的一种有效的方法。如果设主串的长度为m,模式的长度为n,则在主串中寻找模式的KMP算法的时间复杂性是多少?如果某一模式p=’abcaacabaca’,请给出它的next 函数值及next函数的修正值nextval之值。
【说明】
第6题、第7题可以不做。
栈与队列练习题(三)
习题2010-04-25 17:19:42 阅读216 评论0 字号:大中小订阅
1.循环队列的优点是什么?如何判别它的空和满?
2.内存中一片连续空间(不妨假设地址从0到m-1)提供给两个栈S1与S2使用,怎样分配这部分存储空间,使得对任一个栈仅当这部分空间全满时才发生上溢。
3.利用两个栈Sl和S2模拟一个队列(如客户队列)时,如何用栈的运算实现队列的插入、删除运算。请简述算法思想。
4.在栈顶指针为head的链栈中,编写计算该链栈中结点个数的算法。