五树与二叉树练习题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
树与二叉树练习题(五)
习题2010-05-25 17:27:01 阅读55 评论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 s truct N ode{
BTNode *[Max Size+1];
int top;
} stac k ty p;
v oi d PostOrder(BTNode *bt)
{
BTNode *p, *q = bt;
stac k typ S;
int fl ag;
S.top = -1;
do{
while(q != NULL){
S.top++;
if(S.top > MaxSize){
printf("Stac k F ull!");
ex it(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];
v oi d CreatTree(BTNode *T, int i)
{
_________①_________;
T->data = A[i];
if(________②________)
CreatTree(_______③________);
else
r->lchild = NULL;
if(_________④_________)
CreatTree(_______⑤________);
else
r->rchild = NULL;
}
v oi d BTree(ar a, BTNOde *p)
{
int j;
j = ________⑥__________;
CreatTree(p, j);
}
9. 二叉树采用二叉链表存储结构,试设计算法计算一棵给定二叉树的各结点的子孙个数。
10. 一棵具有n个结点的完全二叉树,以一维数组作为存储结构,试设计一个对该完全二叉树进行前序遍历的算法。
11. 已知一棵二叉树的前序遍历序列和中序遍历序列,编写算法建立对应的二叉树。
12. 编写一个算法,利用叶子结点中的空指针域,将所有叶子结点链接为一个带有头结点的单链表,算法返回头结点的地址。