#include<stdio.h> #include<stdlib.h> typedef int DataType; typedef struct node{ DataType data; struct node *lch,*rch; } Bnode, *BiTree;
//构造二叉树 Bnode *create() { Bnode *p; DataType x; scanf("%d",&x); if(x==0) p=NULL; else{ p=(Bnode *)malloc(sizeof(Bnode)); p->data=x; p->lch=create(); p->rch=create(); } return p; }
//先序遍历 void fstorder(Bnode *p) { if(p!=NULL) { printf("%4d",p->data); fstorder(p->lch); fstorder(p->rch); } }
//中序遍历 void middleorder(Bnode *p) { if(p!=NULL) { middleorder(p->lch); printf("%4d",p->data); middleorder(p->rch); } }
//后序遍历 void lastorder(Bnode *p) { if(p!=NULL) { lastorder(p->lch); lastorder(p->rch); printf("%4d",p->data); } }
//按层编序 void levelorder(Bnode *p) { Bnode *q[20]; int front,rear; front=rear=0; if(p!=NULL) { rear++; q[rear]=p;} while(front!=rear) { front++; p=q[front];printf("%4d",p->data); if(p->lch!=NULL) { rear++; q[rear]=p->lch;} if(p->rch!=NULL) { rear++; q[rear]=p->rch;} } }
void main() { int m=1; Bnode *Tree; while(m){ printf("\n\n 二叉树(int整型数据)二叉树表存储操作菜单"); printf("\n 0—退出系统"); printf("\n 1—<先序程序>创建二叉树"); printf("\n 2—二叉树的先序遍历"); printf("\n 3—二叉树的中序遍历"); printf("\n 4—二叉树的后序遍历"); printf("\n 5—二叉树的层序遍历"); printf("\n请输入菜单功能号:"); scanf ("%d",&m); switch(m){ case 0: break; case 1: printf("\n请输入二叉树的先序序列(空子数用0表示)😊; Tree = create(); break; case 2: printf("\n二叉树先序遍历结果:"); fstorder( Tree ); printf("\n"); break; case 3: printf("\n二叉树中序遍历结果:"); middleorder( Tree ); printf("\n"); break; case 4: printf("\n二叉树后序遍历结果:"); lastorder( Tree ); printf("\n"); break; case 5: printf("\n二叉树层序遍历结果:"); levelorder( Tree ); printf("\n"); break; } //switch(m){ } //while(m){
}
|