编写函数输出该森林(含树)的深度
函数接口定义:
int Get_Depth_Of_CSTree(CSTree CST);
其中 T是用户传入的参数,表示二叉树根节点的地址。
每行给出不多于N(N<31)个数,对应一棵树。
裁判测试程序样例:
//头文件包含
#include<iostream>
#include<malloc.h>
#include<stdio.h>
using namespace std;
//函数状态码定义
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW -1
#define INFEASIBLE -2
#define NULL 0
typedef int Status;
char s[31];
int cnt=0;
//二叉链表存储结构定义
typedef char TElemType;
typedef struct CSNode
{
TElemType data;
struct CSNode *firstchild;
struct CSNode *nextsibling;
}CSTNode,*CSTree;
Status CreateCSTree(CSTree &CST)
{
TElemType e;
e=s[cnt++];
if(e=='*')
CST=NULL;
else
{
CST=(CSTNode*)malloc(sizeof(CSTNode));
if(!CST)
exit(OVERFLOW);
CST->data=e;
CreateCSTree(CST->firstchild);
CreateCSTree(CST->nextsibling);
}
return OK;
}
//下面是需要实现的函数的声明
int Get_Depth_Of_CSTree(CSTree CST);
//下面是主函数
int main()
{
CSTree CST;
while(cin>>s)
{
CreateCSTree(CST);
cout << Get_Depth_Of_CSTree(CST);
cout << endl;
cnt=0;
}
return 0;
}
/* 请在这里填写答案 */
输入样例:
ABH**CE*FG***D***
*
AB*C*D***
输出样例:
4
0
2
个人解答
int Get_Depth_Of_CSTree(CSTree CST) {
if (!CST) { return 0; }
else if (Get_Depth_Of_CSTree(CST->firstchild) + 1 > Get_Depth_Of_CSTree((CST->nextsibling))) {
return 1 + Get_Depth_Of_CSTree(CST->firstchild);
} else if (Get_Depth_Of_CSTree(CST->firstchild) + 1 <= Get_Depth_Of_CSTree(CST->nextsibling)) {
return Get_Depth_Of_CSTree(CST->nextsibling);
}
}