二叉树的先序、中序、后序以及层次遍历

来源:互联网 发布:笑声音效软件 编辑:程序博客网 时间:2024/06/08 16:11

图为创建一个简单的二叉树,你们也可以创建一些复杂的!



好了,直接上代码!

#include<stdio.h>#include<stdlib.h>#include<string.h>#include<conio.h>#include<malloc.h>#define STACK_INIT_SIZE 100#define STACKINCREMENT 10typedef int Status;typedef struct BiTNode{char data;struct BiTNode *lchild;struct BiTNode *rchild;}BiTNode,*BiTree;Status CreateBiTree(BiTree &T){//创建树char ch;scanf("%c",&ch);if(ch=='#')T=NULL;else{    if(!(T=(BiTNode *)malloc(sizeof(BiTNode))))exit(0);T->data=ch;CreateBiTree(T->lchild);CreateBiTree(T->rchild);}return 1;}Status Visit(BiTree T){if(T){printf("%c",T->data);return 1;}return 0;}Status PreOrderTraverseFirst(BiTree T){//先序遍历if(T){Visit(T);PreOrderTraverseFirst(T->lchild);PreOrderTraverseFirst(T->rchild);return 1;}return 0;}Status PreOrderTraverseSecond(BiTree T){//中序遍历if(T){PreOrderTraverseSecond(T->lchild);Visit(T);PreOrderTraverseSecond(T->rchild);return 1;}return 0;}Status PreOrderTraverseThree(BiTree T){//后序遍历if(T){PreOrderTraverseThree(T->lchild);PreOrderTraverseThree(T->rchild);Visit(T);return 1;}return 0;}void LevelOrder(BiTNode *b){BiTNode *p;BiTNode *qu[10];//定义循环队列,存放节点指针int front,rear;front=rear=0;//置队列为空队列rear++;qu[rear]=b;//根节点指针进队while(front!=rear){//队列不为空front=(front+1)%10;//队头出队p=qu[front];//printf("%c",p->data);//访问节点if(p->lchild!=NULL){//有左孩子时将其进队rear=(rear+1)%10;qu[rear]=p->lchild;}if(p->rchild!=NULL){//有右孩子时将其进队rear=(rear+1)%10;qu[rear]=p->rchild;}}}void menu(){printf("\n\t\t\t1.创建树");printf("\n\t\t\t0.退出");printf("\n\t\t请选择:");}int main(){BiTree T;char e;int n;while (1){menu();scanf("%d",&n);switch(n) {case 1:printf("\n\t\t\t创建树\n\t\t\t");     getchar();        CreateBiTree(T);printf("\n\t\t\t先序遍历 :");        PreOrderTraverseFirst(T);         printf("\n\t\t\t中序遍历:");         PreOrderTraverseSecond(T);         printf("\n\t\t\t后续遍历 :");         PreOrderTraverseThree(T);        printf("\n\t\t\t层次遍历:");         LevelOrder(T);break;case 0:exit(1);break;default:printf("\n操作有误!!!");break;}printf("\n\n\n");}return 0;}


0 0
原创粉丝点击