我正在研究基础算法和数据结构。
典型的二叉搜索树插入算法类似于:
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
使用实际上是列表的树,搜索当然需要线性时间。
预计二进制搜索树实现?或者您希望插入功能能够进行某种重新平衡吗?
答案 0 :(得分:0)
您有两种二叉搜索树。您拥有的第一个,在最坏的情况下,它将需要线性时间来插入和删除,当您以Increasing
或decreasing
顺序插入内容时会发生这种情况。
然而,这是简单的二叉搜索树。
还有RedBlack Binary search
树或有时称为2-3二叉搜索树,因为在每个节点中您可以有两个值。这意味着从每个节点都有红色链接或黑色链接到其他节点。这些被称为平衡搜索树,因为黑色边缘的数量在每条路径中相等(从源到深度)。这里二进制搜索树从下行开始增长,但RedBlack搜索树在其节点已满时会弹出一个值(这很有趣)。
搜索并插入:此算法有点复杂,但插入和搜索的复杂性始终为~logN
。
最大高度此树的最大高度介于log3N
和logN
之间: