exercies.md 2.2 KB
Newer Older
张志晨 已提交
1 2 3 4 5 6
# 柯里昂家族树

在《教父》中,柯里昂家族是一个著名的黑手党家族,由家族的首领柯里昂(Don Corleone)和他的四个儿子构成。柯里昂家族的家谱是一棵二叉树,其中柯里昂是根节点,他的儿子们分别是他的左儿子和右儿子。

现在,你需要编写一个程序,读入一个包含若干行的字符串,每行表示一个人的信息。每行的格式如下:

张志晨 已提交
7
<人物名称> is the <父亲名称>\'s <儿子>
张志晨 已提交
8 9 10 11 12

其中,人物名称是一个不包含空格的字符串,父亲名称和儿子也是一个不包含空格的字符串。

例如,下面是一棵柯里昂家族的家谱:

张志晨 已提交
13 14 15 16
Don Corleone is the Don\'s son
Fredo Corleone is the Don\'s son
Michael Corleone is the Don\'s son
Tom Hagen is the Don\'s adopted son
张志晨 已提交
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39

你的程序需要按照这些信息建立一棵二叉树,并输出这棵树的前序遍历。

例如,对于上面的家谱,输出应该是:

Don Corleone Fredo Corleone Michael Corleone Tom Hagen

你的程序需要支持以下功能:

 - 建立二叉树。你需要定义一个结构体表示一个节点,包含人物名称、左儿子和右儿子三个字段。你需要编写一个函数,读入若干行字符串,根据字符串中的信息建立二叉树。

 - 输出前序遍历。你需要编写一个函数,输出给定二叉树的前序遍历。
## 输入格式
输入的第一行包含一个整数 n(1 <= n <= 1000),表示字符串的行数。

接下来的 n 行,每行包含一个字符串,表示一个人的信息。字符串的格式如上文所述。

## 输出格式
输出给定二叉树的前序遍历,每个人物名称占一行。

## 输入样例

4
张志晨 已提交
40 41 42 43
Don Corleone is the Don\'s son
Fredo Corleone is the Don\'s son
Michael Corleone is the Don\'s son
Tom Hagen is the Don\'s adopted son
张志晨 已提交
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60

## 输出样例

Don Corleone
Fredo Corleone
Michael Corleone
Tom Hagen

## 提示

1. 人物名称和父亲名称均由不超过 100 个字符组成,且不包含空格;

2. 儿子的值可能是 "son" 或 "adopted son";

3. 输入中可能会出现重名的人物,你的程序需要处理这种情况;

4. 输入的字符串保证是合法的,不会出现父亲名称找不到的情况。