exercies.md 2.2 KB
Newer Older
CSDN问答's avatar
CSDN问答 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
# 柯里昂家族树

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

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

<人物名称> is the <父亲名称>`s <儿子>

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

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

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

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

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

Don Corleone Fredo Corleone Michael Corleone Tom Hagen

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

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

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

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

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

## 输入样例

4
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

## 输出样例

Don Corleone
Fredo Corleone
Michael Corleone
Tom Hagen

## 提示

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

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

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

张志晨 已提交
60
4. 输入的字符串保证是合法的,不会出现父亲名称找不到的情况。