求树中叶子节点的个数
算法思想:
遍历树中的每个节点,如果数中其他节点的parent域都不等于某个节点的下标,则这个节点为叶子节点。
#include<stdio.h>
#define maxsize 100
typedef struct PTNode
{
char data;
int parent;
}PTNode;//树的节点类型
typedef struct PTree
{
PTNode Tnode[maxsize];
int n;
}PTree;//树
int GetLeaves(PTree );
PTree CreatePTree();
//建树
PTree CreatePTree()
{
int i,n;
char ch;
int parentId;
PTree newTree;
scanf("%d",&n);
getchar();
newTree.n=n;
//循环输入每个节点的数据域和双亲域
for(i=0;i<n;i++)
{
scanf("%c %d",&ch,&parentId);
newTree.Tnode[i].data=ch;
newTree.Tnode[i].parent=parentId;
getchar();
}
return newTree;
}
//求叶子节点
int GetLeaves(PTree pt)
{
int i,j,k;
int count=0;
for(i=0;i<pt.n;i++)
{
j=i;
for(k=0;k<pt.n;k++)
{
if(pt.Tnode[k].parent==j)
break;
}
if(k==pt.n)
count++;
}
return count;
}
int main(void)
{
int count;
PTree newTree=CreatePTree();
count=GetLeaves(newTree);
printf("叶子结点个数为:%d\n",count);
return 0;
}