《数据结构期中复习归纳》
一、函数题
求二叉树的高度
函数接口定义:
int GetHeight( BinTree BT );
其中BinTree结构定义如下:
typedef struct TNode *Position;
typedef Position BinTree;
struct TNode{
ElementType Data;
BinTree Left;
BinTree Right;
};
要求函数返回给定二叉树BT的高度值。
裁判测试程序样例:
#include <stdio.h>
#include <stdlib.h>
typedef char ElementType;
typedef struct TNode *Position;
typedef Position BinTree;
struct TNode{
ElementType Data;
BinTree Left;
BinTree Right;
};
BinTree CreatBinTree(); /* 实现细节忽略 */
int GetHeight( BinTree BT );
int main()
{
BinTree BT = CreatBinTree();
printf("%d\n", GetHeight(BT));
return 0;
}
/* 你的代码将被嵌在这里 */
输出样例(对于图中给出的树):
代码如下:
int GetHeight( BinTree BT )
{
int Ld,Rd;
if(BT == NULL)
{
return 0;
}
else
{
Ld = GetHeight(BT->Left);
Rd = GetHeight(BT->Right);
return (Ld>Rd?Ld:Rd)+1;
}
}
二叉树的遍历
本题要求给定二叉树的4种遍历。
- 函数接口定义:
- void InorderTraversal( BinTree BT );
- void PreorderTraversal( BinTree BT );
- void PostorderTraversal( BinTree BT );
- void LevelorderTraversal( BinTree BT );
- 其中BinTree结构定义如下:
- typedef struct TNode *Position;
- typedef Position BinTree;
- struct TNode{
-
ElementType Data;
-
BinTree Left;
-
BinTree Right;
- };
- 要求4个函数分别按照访问顺序打印出结点的内容,格式为一个空格跟着一个字符。
- 裁判测试程序样例:
- #include <stdio.h>
- #include <stdlib.h>
- typedef char ElementType;
- typedef struct TNode *Position;
- typedef Position BinTree;
- struct TNode{
-
ElementType Data;
-
BinTree Left;
-
BinTree Right;
- };
- BinTree CreatBinTree(); /* 实现细节忽略 */
- void InorderTraversal( BinTree BT );
- void PreorderTraversal( BinTree BT );
- void PostorderTraversal( BinTree BT );
- void LevelorderTraversal( BinTree BT );
- int main()
- {
-
BinTree BT = CreatBinTree();
-
printf("Inorder:"); InorderTraversal(BT); printf("\n");
-
printf("Preorder:"); PreorderTraversal(BT); printf("\n");
-
printf("Postorder:"); PostorderTraversal(BT); printf("\n");
-
printf("Levelorder:"); LevelorderTraversal(BT); printf("\n");
-
return 0;
- }
- /* 你的代码将被嵌在这里 */
- 输出样例(对于图中给出的树):
- Inorder: D B E F A G H C I
- Preorder: A B D F E C G H I
- Postorder: D E F B H G I C A
- Levelorder: A B C D F G I E H
代码如下:
void InorderTraversal( BinTree BT )
{
if(BT)
{
if(BT->Left)
InorderTraversal(BT->Left);
printf(" %c",BT->Data);
if(BT->Right)
InorderTraversal(BT->Right);
}
}
void PreorderTraversal( BinTree BT )
{
if(BT)
{
printf(" %c",BT->Data);
if(BT->Left)
PreorderTraversal(BT->Left);
if(BT->Right)
PreorderTraversal(BT->Right);
}
}
void PostorderTraversal( BinTree BT )
{
if(BT)
{
if(BT->Left)
PostorderTraversal(BT->Left);
if(BT->Right)
PostorderTraversal(BT->Right);
printf(" %c",BT->Data);
}
}
void LevelorderTraversal( BinTree BT )
{
BinTree que[101],t;
int head=0,rear=0;
if(BT){
que[rear++]=BT;
while(head!=rear)
{
t=que[head++];
printf(" %c",t->Data);
if(t->Left)
que[rear++]=t->Left;
if(t->Right)
que[rear++]=t->Right;
}
}
}
求采用邻接矩阵作为存储结构的有向图各顶点的出度
函数接口定义:
函数接口为:
void dgree(MGraph G);
• 1
• 2
G为采用邻接矩阵作为存储结构的有向图
裁判测试程序样例:
#include <stdio.h>
#define MVNum 100 //最大顶点数
typedef struct{
char vexs[MVNum]; //存放顶点的一维数组
int arcs[MVNum][MVNum]; //邻接矩阵
int vexnum,arcnum; //图的当前顶点数和边数
}MGraph;
void dgree(MGraph G);
void CreatMGraph(MGraph G);/ 创建图 */
int main()
{
MGraph G;
CreatMGraph(&G);
dgree(G);
return 0;
}
void CreatMGraph(MGraph *G)
{
int i,j,k;
scanf("%d%d",&G->vexnum,&G->arcnum);
getchar();
for(i=0;ivexnum;i++)
scanf("%c",&G->vexs[i]);
for(i=0;ivexnum;i++)
for(j=0;jvexnum;j++)
G->arcs[i][j]=0;
for(k=0;karcnum;k++)
{
scanf("%d%d",&i,&j);
G->arcs[i][j]=1;
G->arcs[j][i]=1;
}
}
/* 请在这里填写答案 */
输入样例:
第一行给出图的顶点数n和边数e。第二行给出n个字符,表示n个顶点的数据元素的值。后面是e行,给出每一条边的两个顶点编号。
4 5
ABCD
0 1
0 2
1 2
1 3
2 3
•
输出样例:
输出n个顶点的元素值,顶点的数据类型为字符型。以及各顶点的度值
A:2
B:3
C:3
D:2
代码如下:
void outdegree(MGraph G)
{
for(int i = 0; i < G.vexnum; i++)
{
int c = 0;
for(int j = 0; j < G.vexnum; j++)
if(G.arcs[i][j] == 1)
c++;
printf("%c:%d\n",G.vexs[i],c);
}
}
二、程序填空题
判断题