算法与数据结构考研试题精析-第6章算法设计题25
程序员文章站
2022-05-20 10:34:50
...
如果以二叉链表做为存储结构,编写统计二叉树非叶子结点个数的层次遍历算法
#include <stdio.h>
#include <stdlib.h>
#define maxsize 20
typedef struct Node
{
char data;
struct Node *lchild,*rchild;
}Node,*BiTree;
int CreateBiTree(BiTree *T);
void Traversebylayer(BiTree T);
int main()
{
BiTree *T;
T=(BiTree *)malloc(sizeof(BiTree));
CreateBiTree(T);
BiTree Q[maxsize];
Traversebylayer(*T);
return 0;
}
int CreateBiTree(BiTree *T)
{
fflush(stdin);
printf("please input the node data:");
char ch;
scanf("%c",&ch);
*T=(BiTree)malloc(sizeof(Node));
(*T)->data=ch;
char c;
fflush(stdin);
printf("Dose %c has leftchild(y--yes,n--no):",ch);
scanf("%c",&c);
if(c=='y')
CreateBiTree(&(*T)->lchild);
else
(*T)->lchild=NULL;
fflush(stdin);
printf("Dose %c has rightchild(y--yes,n--no):",ch);
scanf("%c",&c);
if(c=='y')
CreateBiTree(&(*T)->rchild);
else
(*T)->rchild=NULL;
return 0;
}
void Traversebylayer(BiTree T)
{
BiTree Q[maxsize],t;
int first,last,count;
first=count=0;
last=1;
Q[first]=T; //将根结点存入队列
while(first!=last)
{
t=Q[first];
first=(first+1)%maxsize;
if(!t->lchild && !t->rchild)
;
else
{
count++;
if(t->lchild)
{
Q[last]=t->lchild;
last=(last+1)%maxsize;
}
if(t->rchild)
{
Q[last]=t->rchild;
last=(last+1)%maxsize;
}
}
}
printf("有%d个非叶子结点。\n",count);
}
上一篇: 指定与便利构造函数