将空二进制树填充为二进制搜索树而不更改结构(节点链接)

时间:2016-06-13 12:19:00

标签: algorithm binary-tree

我今天接受了采访,并被要求对此进行编码.. 您已经创建了一个无序的二叉树,任何节点都没有数据。 我们有一个具有相同数量元素的数组。 我们必须在二叉树中插入数据作为二叉搜索树而不改变二叉树的结构。

我想出的方法是对数组进行排序,然后逐个遍历其元素,将每个数据元素放在树中的第一个空的inorder节点中。 但我猜这是不正确的,因为我没有被选中。

很抱歉,如果不允许算术问题。如果出现这样的问题,我会把它拿下来......

2 个答案:

答案 0 :(得分:3)

这是正确的,当您对数组进行排序并将其按顺序放入不可更改的树中时,树正确填充。 但也许有更好的方法来解决这个任务...没有排序,或者可能是另一个问题错了...抱歉

答案 1 :(得分:2)

假设在数据项之间只允许<>比较,那么您的解决方案不仅正确,而且无法做得更好(在渐近意义上)。

您的解决方案涉及对数据进行排序,这需要花费时间O(n log n),然后按顺序遍历将其插入树中,这需要时间O(n),总时间复杂度为O( n log n)。请注意,在构建二叉搜索树之后,我们可以使用有序遍历以排序顺序读出其所有数据 - 也就是说,解决访问者的问题可以用于排序任何给定的数据元素序列。

现在假设相反,实际上有一些算法可以在o(n log n)时间内解决访问者的问题 - 也就是说,时间复杂度比你给出的时间复杂得多。然后,该算法可以用于严格地比O(n log n)时间对给定数据进行排序。但我们知道这是不可能的--O(n log n)是排序n个元素所需时间的下限,如果允许我们使用它们,则使用<或{{来比较它们1}}。因此,不存在这样的更好的算法。

请注意,如果我们假设输入值是由某个常量限定的小整数,则此绑定将无法保持,因为基数排序等操作可以在O(n)时间内执行排序。