📜  2-3棵树| (搜索并插入)

📅  最后修改于: 2021-04-17 12:15:37             🧑  作者: Mango

2-3树是一种树数据结构,其中每个内部节点(非叶节点)具有一个数据元素和两个子元素或两个数据元素和三个子元素。如果节点包含一个数据元素leftVal ,则它具有两个子树(子代),分别是leftmiddle 。而如果节点包含两个数据元素leftValrightVal ,则它具有三个子树,即leftmiddleright

2-3棵树的主要优点是,与二叉搜索树相比,它本质上是平衡的,二叉搜索树在最坏情况下的高度可以为O(n)。因此,搜索,插入和删除等操作的最坏情况下的时间复杂度是O(log(n))因为2-3棵树的高度是O(log(n))

搜索:要在给定的2-3树T中搜索密钥K ,我们遵循以下过程:

基本案例:

  1. 如果T为空,则返回False(在树中找不到键)。
  2. 如果当前节点包含等于K的数据值,则返回True。
  3. 如果到达叶节点并且它不包含必需的键值K ,则返回False。

递归调用:

  1. 如果K
  2. 否则,如果currentNode.leftVal < K
  3. 否则,如果K > currentNode.rightVal,我们将探索当前节点的右子树。

考虑以下示例:

插入:下面将讨论3种可能的插入情况:

情况1:插入只有一个数据元素的节点

情况2:插入具有两个数据元素的节点,其父元素仅包含一个数据元素。

情况3:插入具有两个数据元素的节点,其父级也包含两个数据元素。