二叉搜索树/采摘根

时间:2017-03-09 16:36:49

标签: algorithm data-structures binary-search-tree

我不太确定如何为二叉搜索树选择一个根(我想要没有任何代码):

5,9,2,1,4,8,3,7,6

如何选择根?

这个步骤让我对此算法感到困惑。

4 个答案:

答案 0 :(得分:2)

您可以初始化一个空的BST(二叉搜索树),然后迭代列表并插入每个项目。

您不需要选择根,只需构建树。但也许你想要平衡树,你可以作为第一个元素插入列表的中间值,但正确的答案是使用平衡的二叉搜索树(AVL树)。

答案 1 :(得分:1)

中位数将是更好的选择,因为您希望减少深度。 这是一个例子,根是找到中位数,下一个也找到中位数

                 5 
          3             8
    2         4       7    9
 1                  6          

5是(1 + 9)/ 2。 3从天花板(1 + 4)/ 2(你也可以选择中位数作为选择中位根的角色)

答案 2 :(得分:0)

  

如何选择根?

以你想要的方式。您的任何数据都可以是根。

你想选择中位数,在这种情况下,5。通过这个选择,你的树应该得到平衡,5左边的四个节点和右子树5的4个节点。 / p>

请注意,任何元素都可以作为结果(即使是随机选择,也可以是示例中的第一个数字)。

  嗯,那我为什么要担心找到中位数而不总是选择第一个数字(最简单的选择)?

因为您希望二进制搜索树(BST)尽可能平衡

如果您选择最小或最大数字作为根,那么您的树将达到其最大深度(最坏情况),并将模拟单个链表,这将导致搜索算法的最坏情况同样。然而,正如Michel所说,为根获取最小或最大项目不一定会导致退化树。例如,如果您选择了根的最小项目,但是包含其余项目的右侧分支是平衡的,那么树的高度只比最佳值高一个级别。如果您按升序或降序选择节点,则只会得到退化树。

请记住,在BST中,必须遵守此规则:

左子节点小于父节点和 所有孩子都比父节点大。

有关详情,请参阅How binary search tree is created?

答案 3 :(得分:0)

具有相同值的BST可以有多种形式。例如,包含1,2的树可以是:

1  <- root
 \
  2  <-- right son

    2  <- root
   /
  1  <-- left son

所以你可以有一棵树,其中1是根,它是1-> 2&gt; 3 ...而没有左儿子。您可以将5作为根,4和6分别作为左右儿子,并且您可以使许多其他树具有相同的值,但不同的顺序(可能是不同的根)