第一课二叉树

来源:互联网 发布:linux下copy命令 编辑:程序博客网 时间:2024/05/18 01:24

参开书刘汝佳的《算法竞赛入门经典》6.3.2

#include<stdio.h>#include<string.h>#include<malloc.h>#define MAX_SIZE sizeof(struct Tree)typedef struct Tree{    int num;    struct Tree*left,*right;}tree;tree * root;int  array[100];tree* Get_tree()/*申请节点*/{    tree *p;    p=(tree*)malloc(MAX_SIZE);   if(p!=NULL)  {    p->left=NULL;    p->right=NULL;  }    return p;}void go_to(int y,char *x){    tree*u;    u=root;    int i,n=strlen(x);    for(i=0;i<n;i++)    {        if(x[i]=='L')        {            if(u->left==NULL)            u->left=Get_tree();            u=u->left;        }        else if(x[i]=='R')        {            if(u->right==NULL)            u->right=Get_tree();            u=u->right;        }        else        {            u->num=y;        }    }}int get_array(){    tree *u[100];    int front=0,rear=1,n=0;    u[0]=root;    while(front<rear)    {        tree*p=u[front++];        array[n++]=p->num;        if(p->left!=NULL)        u[rear++]=p->left;        if(p->right!=NULL)        u[rear++]=p->right;    }    return rear;}int  BuildTree(){    int num;    char x[50];    root=Get_tree();    for(;scanf("%s",x);)    {        if(!strcmp(x,"()"))            break;        else        {            sscanf(&x[1],"%d",&num);            go_to(num,strchr(x,',')+1);        }    }    return get_array();}int main(){    int i;    int n=BuildTree();     for(i=0;i<n;i++)        printf("%d\n",array[i]);     return 0;}


0 0
原创粉丝点击