从一个文本来创建一颗树

在做跟树有关的题目的时候,当然是leetcode上面的题目,我发现leetcode上面的树是这样表示的:{2,1,3,0,7,9,1,2,#,1,0,#,#,8,8,#,#,#,#,7},于是为了便于测试,我可以直接利用这个文本文件来生成一个树,这样生成树的工作就变得非常简单了。代码如下:

typedef struct TreeNode{
    int value;
    struct TreeNode *left;
    struct TreeNode *right;
}TreeNode,*Tree;

void constructtree(Tree *T , char filepath[])
{
    FILE *f;
    f=fopen(filepath,"r");
    char line[256];
    Tree tarray[256];
    memset(tarray,NULL,sizeof(Tree)*256);
    fgets(line,256,f);
    cout<<line<<endl;
    char numstr[12];
    int nump=0,k=0;
    for(int i=1 ; i<256 && line[i]!='\0'; i++){
        if(line[i]==',' || line[i]=='}'){
            numstr[nump]='\0';
            if(numstr[nump-1]=='#'){
                tarray[k]=NULL;
                k++;
            }
            else{
                TreeNode *tp=(Tree)malloc(sizeof(TreeNode));            
                tp->value=atoi(numstr);
                tarray[k]=tp;
                k++;
            }
            nump=0;
        }
        else{
            numstr[nump]=line[i];
            nump++;
        }
    }
    int root,child;
    root=0,child=1;
    for(;root<k;root++){
        if(tarray[root]==NULL)
            continue;
        tarray[root]->left=tarray[child];
        child++;
        tarray[root]->right=tarray[child];
        child++;
    }
    *T=tarray[0];
    fclose(f);
}


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值