树的双亲存储结构

求树的最低一层中节点的个数

算法思想:
首先遍历整棵树,将每个叶子节点所在的层数记录下来放到一个数组中,则数组中最大值出现的次数便是树的最低一层中节点的个数

#include<stdio.h>
#define maxsize 100

typedef struct PTNode
{
   char data;
   int parent;
}PTNode;//树的节点类型

typedef struct PTree
{
   PTNode Tnode[maxsize];
   int n;//树的节点个数
}PTree;//树

typedef struct Level
{
   int index;
   int level;
}Level;

PTree CreatePTree();
int nodes(PTree );

//建树
PTree CreatePTree()
{
   int i,n;
   int 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;
}

//求树的最低一层节点的个数
int nodes(PTree pt)
{
   int i,j,k,t=0,count,ns;
   Level a[maxsize];
   int max;
   PTNode p;

   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)
	  {
	     a[t].index=j;
		 p=pt.Tnode[j];
		 count=1;
		 while(p.parent!=-1)
		 {
		    count++;
			p=pt.Tnode[p.parent];
		 }
		 a[t].level=count;
		 t++;
	  }

   }

   ns=0;
   max-=1;

   for(i=0;i<t;i++)
   {
       if(a[i].level>max)
		   max=a[i].level;
   }

   for(i=0;i<t;i++)
   {
      if(a[i].level==max)
		  ns++;
   }

   return ns;

}
int main(void)
{
   
	int count;
	PTree newTree = CreatePTree();
	count = nodes(newTree);
     
	printf("最低一层中的节点个数为:%d个\n",count);
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值