# 柯里昂家族树 在《教父》中,柯里昂家族是一个著名的黑手党家族,由家族的首领柯里昂(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. 输入中可能会出现重名的人物,你的程序需要处理这种情况; 4. 输入的字符串保证是合法的,不会出现父亲名称找不到的情况。