二进制搜索树:如何/如果处理不幸的插入订单?

时间:2017-11-13 01:27:08

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

我正在研究基础算法和数据结构。

典型的二叉搜索树插入算法类似于:

insert(newValue)
    if newValue is less than node.value:
        if lesser subtree exists:
            insert into lesser subtree
        otherwise:
            lesser subtree = new tree with newValue
    if newValue is greater than node.value
        if greater subtree exists:
            insert into greater subtree
        otherwise:
            greater subtree = new tree with newValue

如果使用不合适的广告订单,您可以获得与列表相同的树:

insert(1)
insert(2)
insert(3)

产地:

1
 \ 
  2
   \
    3

使用实际上是列表的树,搜索当然需要线性时间。

预计二进制搜索树实现?或者您希望插入功能能够进行某种重新平衡吗?

1 个答案:

答案 0 :(得分:0)

您有两种二叉搜索树。您拥有的第一个,在最坏的情况下,它将需要线性时间来插入和删除,当您以Increasingdecreasing顺序插入内容时会发生这种情况。

然而,这是简单的二叉搜索树。

还有RedBlack Binary search树或有时称为2-3二叉搜索树,因为在每个节点中您可以有两个值。这意味着从每个节点都有红色链接或黑色链接到其他节点。这些被称为平衡搜索树,因为黑色边缘的数量在每条路径中相等(从源到深度)。这里二进制搜索树从下行开始增长,但RedBlack搜索树在其节点已满时会弹出一个值(这很有趣)。

搜索并插入:此算法有点复杂,但插入和搜索的复杂性始终为~logN

最大高度此树的最大高度介于log3NlogN之间:

以下是它的工作原理: enter image description here