A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 瑞雪雄起 中级黑马   /  2015-9-28 16:42  /  268 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

#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;

void InOrder(TNode *root)
{
if(root!=NULL)
{
InOrder(root->lchild);
printf("%c",root->data);
InOrder(root->rchild);
}
}
void PostOrder(TNode *root)
{
if(root!=NULL)
{
PostOrder(root->lchild);
PostOrder(root->rchild);
printf("%c",root->data);
}
}
void PreOrder(TNode *root)
{
Stack *s=(Stack *)malloc(sizeof(Stack));
s->top=-1;
TNode *p=root;
while(p!=NULL||s->top>-1)
{
if(p!=NULL)
{
printf("%c\n",p->data);
s->top++;
s->data[s->top]=p;
p=p->lchild;
}
else if(s->top>-1)
{
p=s->data[s->top];
p=p->rchild;
s->top--;
}
else break;
}
}
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();
PreOrder(root);
InOrder(root);
printf("\n");
PostOrder(root);
printf("\n");
}









0 个回复

您需要登录后才可以回帖 登录 | 加入黑马