我在这里看到了一个用Python实现的想法(不太熟悉Python)的答案 - 我正在寻找更通用的算法。
编辑:
澄清: 假设我们得到一个整数键列表:23 44 88 12 74 32 7 39 10
该名单是任意选择的。我们将从该列表中创建一个几乎完整(或完整)的二叉搜索树。应该只有一棵这样的树......我们怎么找到它?
答案 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的幂时,您可能必须递归地应用该调整。
由于这是一项家庭作业,我会留下让你弄清楚。