层次遍历二叉树(相同类型的结构体可以直接赋值)
来源:互联网 发布:澳门网络博客骗局 编辑:程序博客网 时间:2024/06/14 15:58
#include <stdlib.h>#include <stdio.h>#define LEN sizeof(struct student)typedef struct student *stud;struct student{ int score; stud left; stud right;};stud create(){ stud p; int score; printf("请输入成绩,0结束:"); scanf("%d",&score); if(score==0) { p=NULL; } else{ p=(stud)malloc(LEN); p->score=score; //p->left=p->right=NULL; printf("左结点:\n"); p->left=create(); printf("右结点:\n"); p->right=create(); } return p;}static stud *s;static int N;void STACKinit(int maxN){ s=(stud *)malloc(maxN*sizeof(LEN)); N=0;}int STACKempty(){ return N==0;}void STACKpush(stud p){ s[N++]=p;}stud STACKpop(){ return s[--N];}void traverse(stud p,void (*visit)(stud)){ STACKinit(20); STACKpush(p); while(!STACKempty()){ (*visit)(p=STACKpop()); if(p->right!=NULL) STACKpush(p->right); if(p->left!=NULL) STACKpush(p->left); }}void print(stud p){ printf("%d\t",p->score);}int main(){ stud p=create(); traverse(p,print); return 0;}