求出树中度为1的节点个数并将节点数据域输出
算法思想:
遍历所有节点,找出孩子数目为一的节点即可。
#include<stdio.h>
#define maxsize 100
typedef struct PTNode
{
char data;
int parent;
}PTNode;//树的节点类型
typedef struct PTree
{
PTNode Tnode[maxsize];
int n;//树的节点数目
}PTree;//树
//建树
PTree CreatePTree()
{
int i,n,parentId;
char data;
PTree newTree;
scanf("%d",&n);
newTree.n = n;
getchar();
for(i=0;i<n;i++)
{
scanf("%c %d",&data,&parentId);
newTree.Tnode[i].data = data;
newTree.Tnode[i].parent = parentId;
getchar();
}
return newTree;
}
//查找度为1的节点
int degree_is_1(PTree pt,char *a)
{
int i,j,k=0;
int count;
for(i=0;i<pt.n;i++)
{
count=0;
for(j=0;j<pt.n;j++)
{
if(pt.Tnode[j].parent==i)
count++;
}
if(count==1)
a[k++]=pt.Tnode[i].data;
}
return k;
}
int main(void)
{
int i,count;
char a[maxsize];
PTree newTree = CreatePTree();
count = degree_is_1(newTree,&a);
printf("度为1的节点个数为:%d个,它们分别是:",count);
for(i=0;i<count;i++)
printf("%c ",a[i]);
printf("\n");
return 0;
}