将一棵二叉树的所有结点存储在一维数组中,虚结点用#表示,利用性质5

来源:互联网 发布:sql server guid 编辑:程序博客网 时间:2024/05/17 22:54
#include <stdio.h>#include <stdlib.h>typedef struct BTNode{char data;struct BTNode *lchild,*rchild;}BTNode,*BiTree;#define MAX 100typedef struct CQueue{BiTree *base;int front;int rear;}CQueue;void InitQueue(CQueue &q){//初始化一个队列q.base = (BiTree *)malloc(sizeof(BiTree) * MAX);if(!q.base) exit(0);q.front = q.rear = 0;}//InitQueuevoid EnQueue(CQueue &q,BiTree bt){//数据进队if( ((q.rear + 1)%MAX) == q.front) exit(0);q.base[q.rear] = bt;q.rear = (q.rear + 1)%MAX;}//EnQueueint QueueEmpty(CQueue q){//判断是否为空return q.front == q.rear? 1:0;}void DeQueue(CQueue &q,BiTree &bt){//出队列if(QueueEmpty(q)) exit(0);bt = q.base[q.front];q.front = (q.front +1 )%MAX;}//DeQueuevoid CreatBiTree(BiTree &bt,char Data[],int n){//③ 将一棵二叉树的所有结点存储在一维数组中,虚结点用#表示,//利用二叉树的性质5,建立二叉树的二叉链表。//例如用数组a存储的二叉树的结点如下(0单元不用):CQueue Q;int Qn[MAX],f,r,i;BiTree p;if(n<1){bt = NULL;return;}bt = (BiTree)malloc(sizeof(BTNode));bt ->data = Data[1];InitQueue(Q); EnQueue(Q,bt);f = r = 0;Qn[r++]=1;while(!QueueEmpty(Q)){DeQueue(Q,p); i=Qn[f++];if(2*i > n || Data[2*i] == '#')p->lchild = NULL;else{p->lchild = (BiTree)malloc(sizeof(BTNode));p->lchild->data = Data[2*i];EnQueue(Q,p->lchild);Qn[r++] = 2*i;}if(2*i+1 > n || Data[2*i+1] == '#')p->rchild = NULL;else{p->rchild = (BiTree)malloc(sizeof(BTNode));p->rchild->data = Data[2*i+1];EnQueue(Q,p->rchild);Qn[r++] = 2*i+1;}}}void PreOrderTraverse1(BiTree bt){if(bt){printf("%3c",bt->data);PreOrderTraverse1(bt->lchild);PreOrderTraverse1(bt->rchild);}}void main(){BiTree bt;int n;scanf("%d",&n);CreatBiTree(bt,"#ABC#D#E",n);//结点个数为字符串个数减一PreOrderTraverse1(bt);}

0 0
原创粉丝点击