修改了一下,LZ参考:
#include "stdio.h"
#include "stdlib.h"
//----树的二叉树(孩子-兄弟)存储表示------
typedef struct CSNode
{
char data;
struct CSNode *firstchild, *nextsibling;
}CSNode, *CSTree;
int bi_forest(CSTree *p)
{
char ch;
scanf("%c",&ch);
fflush(stdin);//清输入缓存
if (ch == '#')
{
*p = NULL;
} //如果二叉树是空的,则将相应的森林也设为空
else
{
*p = (CSNode * )malloc(sizeof(CSNode));
(*p)->data = ch;
bi_forest(&(*p)->firstchild);
bi_forest(&(*p)->nextsibling);
}
return 0;
}
//求孩子兄弟链表表示的树T的深度
int GetDepth_CSTree(CSTree T)
{
CSTree p;
int lh;//左树深度
int rh;//右树深度
int h;//树深
if (T == NULL)//..
{
h=0;
} //空树返回应为0
else
{
lh = GetDepth_CSTree(T->firstchild);
rh = GetDepth_CSTree(T->nextsibling);
h=(lh > rh?lh:rh)+1;
}
return h;
}
main()
{
CSTree T;
int count = 0;
bi_forest(&T);
count = GetDepth_CSTree(T);
printf("%d\n",count);
}
输入输出:
a
b
c
#
#
d
#
#
e
#
#
3
Press any key to continue
#include "stdio.h"
#include "stdlib.h"
//----树的二叉树(孩子-兄弟)存储表示------
typedef struct CSNode
{
char data;
struct CSNode *firstchild, *nextsibling;
}CSNode, *CSTree;
int bi_forest(CSTree *p)
{
char ch;
scanf("%c",&ch);
fflush(stdin);//清输入缓存
if (ch == '#')
{
*p = NULL;
} //如果二叉树是空的,则将相应的森林也设为空
else
{
*p = (CSNode * )malloc(sizeof(CSNode));
(*p)->data = ch;
bi_forest(&(*p)->firstchild);
bi_forest(&(*p)->nextsibling);
}
return 0;
}
//求孩子兄弟链表表示的树T的深度
int GetDepth_CSTree(CSTree T)
{
CSTree p;
int lh;//左树深度
int rh;//右树深度
int h;//树深
if (T == NULL)//..
{
h=0;
} //空树返回应为0
else
{
lh = GetDepth_CSTree(T->firstchild);
rh = GetDepth_CSTree(T->nextsibling);
h=(lh > rh?lh:rh)+1;
}
return h;
}
main()
{
CSTree T;
int count = 0;
bi_forest(&T);
count = GetDepth_CSTree(T);
printf("%d\n",count);
}
输入输出:
a
b
c
#
#
d
#
#
e
#
#
3
Press any key to continue
作鲲鹏,遨游于天地沧海