主题:关于用树解决unix目录输出的问题
Given a tree of UNIX directories and file/directory sizes, you are supposed to list them as a tree with proper indention and sizes.
Input Specification:
The input consists of several test cases. Each case consists of several lines which represent the levels of the directory tree. The first line contains the root file/directory. If it is a directory, then its children will be listed in the second line, inside a pair of parentheses. Similarly, if any of its children is a directory, then the contents of that directory will be listed in the next line, inside a pair of parentheses. The format of a file/directory is:
name size or *name size
where name, the name of the file/directory, is a string of no more than 10 characters; size > 0 is the integer size of the file/directory; * means the name is a directory. It is guaranteed that name will not contain characters '(', ')', '[', ']', and '*'. There are no more than 10 levels for each case, and no more than 10 files/directories on each level.
Output Specification:
For each test case, list the tree in the format shown by the sample. Files/directories that are of depth d will have their names indented by 8d spaces. Do NOT print tabs to indent the output. The size of a directory D is the sum of the sizes of all the files/directories in D, plus its own size.
Sample Input:
*/usr 1
(*mark 1 *alex 1)
(hw.c 3 *course 1) (hw.c 5)
(aa.txt 12)
*/usr 1
()
Sample Output: ( represents a space)
|_*/usr[24]
|_*mark[17]
||_hw.c[3]
||_*course[13]
||_aa.txt[12]
|_*alex[6]
|_hw.c[5]
|_*/usr[1]
其实就是要建一个树,然后先序遍历,输出结果,可是建树的过程就很麻烦,怎样输入并且建一个并不是二叉的复杂树,然后输出,晕!
哪位高人给予指点,多谢
Input Specification:
The input consists of several test cases. Each case consists of several lines which represent the levels of the directory tree. The first line contains the root file/directory. If it is a directory, then its children will be listed in the second line, inside a pair of parentheses. Similarly, if any of its children is a directory, then the contents of that directory will be listed in the next line, inside a pair of parentheses. The format of a file/directory is:
name size or *name size
where name, the name of the file/directory, is a string of no more than 10 characters; size > 0 is the integer size of the file/directory; * means the name is a directory. It is guaranteed that name will not contain characters '(', ')', '[', ']', and '*'. There are no more than 10 levels for each case, and no more than 10 files/directories on each level.
Output Specification:
For each test case, list the tree in the format shown by the sample. Files/directories that are of depth d will have their names indented by 8d spaces. Do NOT print tabs to indent the output. The size of a directory D is the sum of the sizes of all the files/directories in D, plus its own size.
Sample Input:
*/usr 1
(*mark 1 *alex 1)
(hw.c 3 *course 1) (hw.c 5)
(aa.txt 12)
*/usr 1
()
Sample Output: ( represents a space)
|_*/usr[24]
|_*mark[17]
||_hw.c[3]
||_*course[13]
||_aa.txt[12]
|_*alex[6]
|_hw.c[5]
|_*/usr[1]
其实就是要建一个树,然后先序遍历,输出结果,可是建树的过程就很麻烦,怎样输入并且建一个并不是二叉的复杂树,然后输出,晕!
哪位高人给予指点,多谢