1 #include"stdio.h" 2 #include"stdlib.h" 3 #define maxsize 100 4 //二叉树链表类型定义 5 typedef struct node{ 6 char data; 7 struct node *lchild;//左指针 8 struct node *rchild;//右指针 9 }BTreeNode; 10 //二叉树创建 11 BTreeNode *create(){ 12 BTreeNode *s; 13 BTreeNode *q[maxsize];//设置数组,存放每个结点的地址值 14 int i,j; 15 char x; 16 printf("***开始创建***\n"); 17 printf("i,x="); 18 scanf("%d,%c",&i,&x); 19 if(i==0)//如果二叉树为空 20 { 21 q[1]=NULL; 22 } 23 while(i!=0&&x!='s')//当i=0,x='s',结束结点创建 24 { 25 s=(BTreeNode*)malloc(sizeof(BTreeNode));//申请内存 26 s->data=x; 27 s->lchild=NULL; 28 s->rchild=NULL; 29 q[i]=s; 30 if(i!=1)//非根节点,寻找双亲结点的地址 31 { 32 j=i/2;//j为双亲结点的地址 33 if(i%2==0)//左孩子 34 { 35 q[j]->lchild=s; 36 } else{//右孩子 37 q[j]->rchild=s; 38 } 39 } 40 printf("i,x="); 41 scanf("%d,%c",&i,&x); 42 } 43 44 45 return q[1];//返回根结点 46 } 47 48 //二叉树遍历 49 //1、先序遍历 50 void preOrder(BTreeNode *Tree){ 51 if(Tree){ 52 printf("%c",Tree->data);//输出根结点 53 preOrder(Tree->lchild);//左结点输出 54 preOrder(Tree->rchild);//右结点输出 55 } 56 57 } 58 //中序遍历 59 void inOrder(BTreeNode *Tree){ 60 if(Tree){ 61 inOrder(Tree->lchild);//左结点输出 62 printf("%c",Tree->data);//输出根结点 63 inOrder(Tree->rchild);//右结点输出 64 } 65 66 } 67 //后序遍历 68 void postOrder(BTreeNode *Tree){ 69 if(Tree){ 70 postOrder(Tree->lchild);//左结点输出 71 postOrder(Tree->rchild);//右结点输出 72 73 printf("%c",Tree->data);//输出根结点 74 75 } 76 77 } 78 //层次遍历 79 void levelOrder(BTreeNode *Tree){ 80 BTreeNode *p,*q[maxsize]; 81 int rear=0,front=0; 82 if(Tree){ 83 p=Tree; 84 q[rear]=p;//根结点入队 85 rear=(rear+1)%maxsize;//尾指针后移 86 while(front!=rear)//当队列不为空 87 { 88 p=q[front];//取队头元素 89 printf("%c",p->data); 90 front=(front+1 )%maxsize;//头指针后移 91 if(p->lchild){//如果左孩子不为空,左孩子入队 92 q[rear]=p->lchild; 93 rear=(rear+1)%maxsize; 94 } 95 if(p->rchild){//如果右孩子不为空,右孩子入队 96 q[rear]=p->rchild; 97 rear=(rear+1)%maxsize; 98 } 99 } 100 } 101 102 } 103 int main(){ 104 BTreeNode *Tree=create();//创建二叉树 105 printf("先序遍历:\n"); 106 preOrder(Tree); 107 printf("\n中序遍历:\n"); 108 inOrder(Tree); 109 printf("\n后序遍历:\n"); 110 postOrder(Tree); 111 printf("\n层次遍历:\n"); 112 levelOrder(Tree); 113 114 }
数据结构学习——二叉树遍历
猜你喜欢
转载自www.cnblogs.com/Rong-Xiu/p/10051530.html
今日推荐
周排行