已知一颗树的节点间关系,请编程实现该树的先根遍历。 输入 若干行,每行描述了一组双亲节点和孩子节点的关系序偶对(每个节点用不同的大写字母表示,节点小于26个)。且数的度小于5。 输出 该树的先根遍历序列,序列中每个字母用空格隔开。
时间: 2024-03-09 17:48:49 浏览: 73
好的,这是一道树的遍历问题,可以使用递归或者栈来实现。下面是使用递归实现的代码:
```python
def pre_order(root, graph, visited):
visited[root] = True
print(root, end=' ')
for child in graph[root]:
if not visited[child]:
pre_order(child, graph, visited)
if __name__ == '__main__':
n = 0
edges = []
while True:
line = input().strip()
if not line:
break
edges.append(line.split())
n += 1
graph = [[] for _ in range(n)]
visited = [False] * n
for edge in edges:
parent, child = ord(edge[0]) - ord('A'), ord(edge[1]) - ord('A')
graph[parent].append(child)
pre_order(0, graph, visited)
```
其中,`pre_order` 函数用来实现先根遍历,`root` 表示当前遍历的节点,`graph` 是邻接表表示的树,`visited` 用来记录节点是否已经被访问过。在遍历过程中,首先将当前节点标记为已访问,然后输出节点值,最后遍历其所有未被访问过的子节点。在 `main` 函数中,首先读入输入数据,构建邻接表,然后从根节点开始递归遍历整棵树。
注意,输入数据中节点使用大写字母表示,需要将其转换为整数进行处理。在本例中,我们将 A 对应的整数设为 0,B 对应的整数设为 1,以此类推。
阅读全文