首页 > 代码库 > 二叉树层序遍历的实现
二叉树层序遍历的实现
我们可以很容易的使用队列来实现二叉树的层序遍历,代码如下:
1 #include <stdio.h> 2 #include <stdlib.h> 3 #define MAX 10 4 5 6 //二叉树存储结构定义 7 typedef char Item; 8 typedef struct node *link; 9 struct node {Item item; link l, r;};10 11 int Create(link *tp);12 void show(link h);13 void tranverse(link h, void (*visit)(link));14 15 //队列存储结构定义16 typedef link QItem;17 static QItem *q;18 static int N, head, tail;19 20 void QUEUEinit(int maxN);21 int QUEUEempty();22 void QUEUEput(QItem item);23 QItem QUEUEget();24 25 26 int main()27 {28 link tree;29 30 Create(&tree);31 tranverse(tree, show);32 33 return 0;34 }35 36 void QUEUEinit(int maxN)37 {38 q = (QItem *)malloc(maxN * sizeof(QItem));39 if (!q) return;40 N = maxN + 1; head = N; tail = 0;41 }42 43 int QUEUEempty()44 {45 return head % N == tail;46 }47 48 void QUEUEput(QItem item)49 {50 q[tail++] = item;51 tail = tail % N;52 }53 54 QItem QUEUEget()55 {56 head = head % N;57 return q[head++];58 }59 60 int Create(link *tp)61 {62 //构造方法,或者说构造顺序:中序遍历构造63 char x;64 scanf("%c",&x);65 if(x==‘#‘)66 {67 *tp=NULL;//指针为空,树节点中的某个指针为空68 return 0;69 }70 *tp=(link)malloc(sizeof(**tp));//将树节点中指针指向该地址空间71 if(*tp==NULL)72 return 0;73 (*tp)->item=x;74 Create(&((*tp)->l));75 Create(&((*tp)->r));76 return 1;77 }78 79 void show(link h)80 {81 printf(" %c ", h->item);82 }83 84 //层序遍历85 void tranverse(link h, void (*visit)(link))86 {87 QUEUEinit(MAX); QUEUEput(h);88 while (!QUEUEempty()){89 (*visit)(h = QUEUEget());90 if (h->l != NULL) QUEUEput(h->l);91 if (h->r != NULL) QUEUEput(h->r);92 }93 }
二叉树层序遍历的实现
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。