黑马程序员技术交流社区

标题: 二叉树层次遍历 [打印本页]

作者: 瑞雪雄起    时间: 2015-9-28 16:41
标题: 二叉树层次遍历
#include<stdio.h>
#include<stdlib.h>
typedef struct Node
{
char data;
Node *lchild;
Node *rchild;
}TNode;
typedef struct Stack
{
int top;
TNode *data[15];
}Stack;
typedef struct QU
{
int first;
int last;
TNode *data[15];
}QU;
void list(TNode *root)
{
QU *qu=(QU *)malloc(sizeof(QU));
qu->first=-1;
qu->last =-1;
qu->first++;
qu->data[qu->first]=root;
TNode *p;
while(qu->first!=qu->last)
{
qu->last++;
p=qu->data[qu->last];
printf("%c",p->data);
if(p->lchild!=NULL)
{
qu->first++;
qu->data[qu->first]=p->lchild;
}
if(p->rchild!=NULL)
{
qu->first++;
qu->data[qu->first]=p->rchild;
}
}
printf("\n");
}
TNode * createTree()
{
char *str="A(B(D(H,),E(,I)),C(F,G(J,)))";
printf("二叉树的序列:%s\n",str);
TNode *root=NULL;
TNode *node;
int tag;
Stack *s=(Stack *)malloc(sizeof(Stack));
s->top=-1;
char ch=*str;

while(ch!='\0')
{

switch(ch)
{
case '(': {tag=0;s->top++;s->data[s->top]=node;break;}
case ')': {s->top--;break;}
case ',': {tag=1;break;}
default:
{
node=(TNode *)malloc(sizeof(TNode));
node->data=ch;
node->lchild =NULL;
node->rchild =NULL;
if(root==NULL)
{
root=node;
}
    switch(tag)
        {
    case 0:{s->data[s->top]->lchild=node;break;}
    case 1:{s->data[s->top]->rchild=node;break;}
        }
        break;
}
}
ch=*(++str);
}
return root;
}
void main()
{
TNode *root=createTree();
list(root);

}





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2