卫星

卫星

中等

说明

想象一下,你需要把一棵二叉树传输给一艘正在飞向半人马座α的卫星,而带宽十分有限。 由于树中没有重复的元素,因此可以用它的前序遍历和中序遍历来唯一地表示。

为卫星编写软件,让它根据这些遍历结果重建这棵树。

前序遍历会先(也就是“前”)读取当前节点的值,再按前序读取左子树。 之后按前序读取右子树。

中序遍历会先按中序读取左子树,然后读取当前节点,最后按中序读取右子树。 也就是从左到右依次读取。

例如,这棵树的前序遍历是 [a, i, x, f, r]。 这棵树的中序遍历是 [i, a, f, x, r]

  a
 / \
i   x
   / \
  f   r

注意:前序遍历中的第一个元素始终是根节点。

异常消息

有时需要抛出一个异常。这样做时,应该始终包含一条有意义的错误消息,说明错误的来源。这能让代码更易读,并且对调试大有帮助。如果你知道错误来源属于某种类型,可以选择抛出内置错误类型中的一种,但仍然应该附上一条有意义的错误消息。

如果preorder和inorder这两个实参长度不匹配、元素不匹配,或者元素不唯一,这个练习就要求你使用raise语句来“抛出”一个ValueError。

只有当你既raise了这个exception,又附带了一条消息时,测试才会通过。

要抛出一个带消息的ValueError,请把消息作为实参传给exception类型:

# if preorder and inorder are not the same length
raise ValueError("traversals must have the same length")

# if preorder and inorder do not share the same elements
raise ValueError("traversals must have the same elements")
    
# if element repeat (are not unique)    
raise ValueError("traversals must contain unique items")
通过 GitHub 编辑 链接将在新窗口或新标签页中打开
Python Exercism

准备好开始 卫星 了吗?

注册 Exercism,借助 17 个概念146 个练习 和真人导师指导,学习并掌握 Python,全部免费。