给定一个键列表,我们如何找到该列表中几乎完整的二叉搜索树?

时间:2017-12-12 16:26:54

标签: data-structures binary-search-tree

我在这里看到了一个用Python实现的想法(不太熟悉Python)的答案 - 我正在寻找更通用的算法。

编辑:

澄清: 假设我们得到一个整数键列表:23 44 88 12 74 32 7 39 10

该名单是任意选择的。我们将从该列表中创建一个几乎完整(或完整)的二叉搜索树。应该只有一棵这样的树......我们怎么找到它?

1 个答案:

答案 0 :(得分:0)

构造binary search tree,以便节点左子树上的所有项都小于节点,右子树上的所有节点都大于节点。

一个完整的(或几乎完整的)二叉树是一个所有级别,除了可能是最后一个完全填满,底层填充到左边。

因此,例如,这是一个几乎完整的二叉搜索树:

     4
   /   \
  2     5
 / \
1   3

这不是:

     3
   /   \
  2     4
 /       \
1         5

因为树的底层没有从左边填充。

如果项目数量少于2的幂(即3,7,15等),那么构建树很容易。首先对列表进行排序。然后,将中间元素作为根。因此,如果您有[1,2,3,4,5,6,7],并且根节点是4。

对于数组的右半部分和左半部分,递归执行相同的操作。

如果项目数不小于2的幂,则必须调整起点(根节点),以便左下方填充。请注意,每当子树长度不小于2的幂时,您可能必须递归地应用该调整。

由于这是一项家庭作业,我会留下让你弄清楚。