六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 35|回复: 0

二叉树的层次遍历

[复制链接]

升级  6%

13

主题

13

主题

13

主题

秀才

Rank: 2

积分
59
 楼主| 发表于 2013-1-26 12:26:51 | 显示全部楼层 |阅读模式
二叉树的层次遍历。
#include<stdio.h>#include<stdlib.h>typedef char DataType;//树结点的数据类型定义typedef struct BTnode{DataType data;struct BTnode* lchild,*rchild;}BTree;//队列的结点数据类型定义typedef struct node{  BTree * tdata; //存放树结点类型的指针  struct node *next;}qnode;//队头指针 和 队尾指针typedef struct {  qnode *front,*rear;}linkQueue;//初始化队列void Init(linkQueue *q){q->front=q->rear=NULL;}//元素入队void InsertQueue(linkQueue * &q,BTree * e){qnode * node;node=(qnode*)malloc(sizeof(qnode));node->tdata=e;node->next=NULL;if(NULL==q->front){q->front=q->rear=node;}else{q->rear->next=node;q->rear=node;}}//元素出队BTree * outQueue(linkQueue * &q){BTree * e;qnode *temp;if(NULL==q->front)e=NULL;else{temp=q->front;e=temp->tdata;q->front=temp->next;free(temp);}return e;}//创建二叉树,以先序的方式输入,如果左孩子或右孩子为空,则输入#  /*    例子  A      输入为:ABD##E##CF###        /  \      B     C     / \    /     D   E  F     */   void createBTree(BTree * &t){char c;   c=getchar();if(c=='#')t=NULL;else{t=(BTree*)malloc(sizeof(BTree));t->data=c;createBTree(t->lchild);//创建左子树createBTree(t->rchild);//创建右子树}}/*二叉树的层次遍历算法: 1.队列queue初始化;2. 将根指针入队;3. 循环直到队列queue为空      3.1 q=队列queue出队的元素;      3.2 访问结点q的数据域;      3.3 若结点q存在左孩子,则将左孩子入队;      3.4 若结点q存在右孩子,则将右孩子入队;*///二叉树的层次遍历void hierarchyTtraversal(linkQueue *queue,BTree * root){BTree *q;InsertQueue(queue,root);while(NULL!=queue->front){q=outQueue(queue);printf("%c  ",q->data);if(q->lchild)InsertQueue(queue,q->lchild);if(q->rchild)InsertQueue(queue,q->rchild);}}int main(){BTree *root;linkQueue queue;Init(&queue);createBTree(root);hierarchyTtraversal(&queue,root);printf("\n");return 0;}
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表