PTA 数据结构与算法 7-30 目录树

如有不对,不吝赐教
进入正题:
在ZIP归档文件中,保留着所有压缩文件和目录的相对路径和名称。当使用WinZIP等GUI软件打开ZIP归档文件时,可以从这些信息中重建目录的树状结构。请编写程序实现目录的树状结构的重建工作。

输入格式:
输入首先给出正整数N(≤10^4​​),表示ZIP归档文件中的文件和目录的数量。随后N行,每行有如下格式的文件或目录的相对路径和名称(每行不超过260个字符):
路径和名称中的字符仅包括英文字母(区分大小写);
符号“\”仅作为路径分隔符出现;
目录以符号“\”结束;
不存在重复的输入项目;
整个输入大小不超过2MB。

输出格式:
假设所有的路径都相对于root目录。从root目录开始,在输出时每个目录首先输出自己的名字,然后以字典序输出所有子目录,然后以字典序输出所有文件。注意,在输出时,应根据目录的相对关系使用空格进行缩进,每级目录或文件比上一级多缩进2个空格。

输入样例:
7
b
c
ab\cd
a\bc
ab\d
a\d\a
a\d\z\

输出样例:
root
a
d
z
a
bc
ab
cd
d
c
b

这道题目其实就是构建一棵树,不过树的左右节点是不同的(在我的方案里面),我的方案是参考了将任一一棵多叉树转换成一棵二叉树的方案,在这道题里面,就是一个子树放目录,另一个子树放文件。
这里稍微注意一下输出,同级的文件和目录是先输出目录,再来文件。输出时可以用递归,也可以迭代。

给出代码:

#include<stdio.h>
#include<malloc.h>
#include<string.h>

struct File{
   
int space;         //到这个文件需要打印的空格数目
char name[261];
struct File *sibFile;   //同级文件链表
};

struct Catalog{
   
int space;         //到该目录需要打印的空格数目
char name[261];
struct Catalog *sonCat;    //子目录分支
struct Catalog *sibCat;     //同级目录分支 按字典序排序
struct File *file;          //文件分支
};

struct Catalog *Add(struct Catalog *root,char *input);
struct Catalog *AddCat(struct Catalog *root,char *name,char *input);
struct Catalog *AddFile(struct Catalog *root,char *name);
void Print(struct Catalog *root);

int main(void)
{
   
    int N,i;
    struct Catalog *root;   //目录树的根
    char input[261];        //每行最多260个字符
    char temp[5]="root";
    scanf("%d",&N);

    root=(struct Catalog *)malloc(sizeof(struct Catalog));
    root->file=(struct File *)malloc(sizeof(struct File));
    root->sibCat

你可能感兴趣的:(PTA,C,PTA,数据结构与算法)