6-1 求二叉树高度 (10分)
本题要求给定二叉树的高度。
函数接口定义:
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;
}
/* 你的代码将被嵌在这里 */
输出样例(对于图中给出的树):
4
int GetHeight( BinTree BT ){
int LeftHeight=0;
int RightHeight=0;
if(BT==NULL){
return 0;
}
LeftHeight=GetHeight(BT->Left);
RightHeight=GetHeight(BT->Right);
return (LeftHeight>RightHeight?LeftHeight:RightHeight)+1;
}
6-2 二叉树的遍历 (10分)
本题要求给定二叉树的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== NULL){
return;
}
InorderTraversal(BT->Left);
printf(" %c",BT->Data);
InorderTraversal(BT->Right);
}
void PreorderTraversal( BinTree BT ){
if(BT== NULL){
return;
}
printf(" %c",BT->Data);
PreorderTraversal(BT->Left);
PreorderTraversal(BT->Right);
}
void PostorderTraversal( BinTree BT ){
if(BT== NULL){
return;
}
PostorderTraversal(BT->Left);
PostorderTraversal(BT->Right);
printf(" %c",BT->Data);
}
void LevelorderTraversal( BinTree BT ){
BinTree TreePosition[1000];
int SaveIndex=0;
int PrintIndex=0;
TreePosition[SaveIndex]=BT;
SaveIndex++;
while (SaveIndex>PrintIndex){
if(TreePosition[PrintIndex]!=NULL){
printf(" %c",TreePosition[PrintIndex]->Data);
TreePosition[SaveIndex]=TreePosition[PrintIndex]->Left;
SaveIndex++;
TreePosition[SaveIndex]=TreePosition[PrintIndex]->Right;
SaveIndex++;
}
PrintIndex++;
}
}
6-3 先序输出叶结点 (10分)
本题要求按照先序遍历的顺序输出给定二叉树的叶结点。
函数接口定义:
void PreorderPrintLeaves( BinTree BT );
其中BinTree结构定义如下:
typedef struct TNode *Position;
typedef Position BinTree;
struct TNode{
ElementType Data;
BinTree Left;
BinTree Right;
};
函数PreorderPrintLeaves应按照先序遍历的顺序输出给定二叉树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(); /* 实现细节忽略 */
void PreorderPrintLeaves( BinTree BT );
int main()
{
BinTree BT = CreatBinTree();
printf("Leaf nodes are:");
PreorderPrintLeaves(BT);
printf("\n");
return 0;
}
/* 你的代码将被嵌在这里 */
输出样例(对于图中给出的树):
Leaf nodes are: D E H I
作者
陈越
单位
浙江大学
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
void PreorderPrintLeaves( BinTree BT ){
if(BT==NULL){
return;
}
if(BT->Right==NULL&&BT->Left==NULL){
printf(" %c",BT->Data);
}
PreorderPrintLeaves(BT->Left);
PreorderPrintLeaves(BT->Right);
}
6-4 统计二叉树结点个数 (10分)
本题要求实现一个函数,可统计二叉树的结点个数。
函数接口定义:
int NodeCount ( BiTree T);
T是二叉树树根指针,函数NodeCount返回二叉树中结点个数,若树为空,返回0。
裁判测试程序样例:
#include <stdio.h>
#include <stdlib.h>
typedef char ElemType;
typedef struct BiTNode
{
ElemType data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
BiTree Create();/* 细节在此不表 */
int NodeCount ( BiTree T);
int main()
{
BiTree T = Create();
printf("%d\n", NodeCount(T));
return 0;
}
/* 你的代码将被嵌在这里 */
输出样例(对于图中给出的树):
二叉树.png
6
作者
DS课程组
单位
临沂大学
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
int NodeCount ( BiTree T){
int Sum=0;
if(T==NULL){
return 0;
}
Sum++;
Sum+=NodeCount(T->lchild);
Sum+=NodeCount(T->rchild);
return Sum;
}
6-5 统计二叉树叶子结点个数 (10分)
本题要求实现一个函数,可统计二叉树的叶子结点个数。
函数接口定义:
int LeafCount ( BiTree T);
T是二叉树树根指针,函数LeafCount返回二叉树中叶子结点个数,若树为空,则返回0。
裁判测试程序样例:
#include <stdio.h>
#include <stdlib.h>
typedef char ElemType;
typedef struct BiTNode
{
ElemType data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
BiTree Create();/* 细节在此不表 */
int LeafCount ( BiTree T);
int main()
{
BiTree T = Create();
printf("%d\n", LeafCount(T));
return 0;
}
/* 你的代码将被嵌在这里 */
输出样例(对于图中给出的树):
二叉树.png
3
作者
DS课程组
单位
临沂大学
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
int LeafCount ( BiTree T){
int RootNum=0;
if(T==NULL){
return 0;
}
if(T->rchild==NULL&&T->lchild==NULL){
RootNum++;
}
RootNum+=LeafCount(T->lchild);
RootNum+=LeafCount(T->rchild);
return RootNum;
}