2-3树是一种树数据结构,其中每个内部节点(非叶节点)具有一个数据元素和两个子元素或两个数据元素和三个子元素。如果节点包含一个数据元素leftVal ,则它具有两个子树(子代),分别是left和middle 。而如果节点包含两个数据元素leftVal和rightVal ,则它具有三个子树,即left , middle和right 。
2-3棵树的主要优点是,与二叉搜索树相比,它本质上是平衡的,二叉搜索树在最坏情况下的高度可以为O(n)。因此,搜索,插入和删除等操作的最坏情况下的时间复杂度是因为2-3棵树的高度是 。
搜索:要在给定的2-3树T中搜索密钥K ,我们遵循以下过程:
基本案例:
- 如果T为空,则返回False(在树中找不到键)。
- 如果当前节点包含等于K的数据值,则返回True。
- 如果到达叶节点并且它不包含必需的键值K ,则返回False。
递归调用:
- 如果K
- 否则,如果currentNode.leftVal < K
- 否则,如果K > currentNode.rightVal,我们将探索当前节点的右子树。
- 否则,如果currentNode.leftVal < K
考虑以下示例:
插入:下面将讨论3种可能的插入情况:
情况1:插入只有一个数据元素的节点
情况2:插入具有两个数据元素的节点,其父元素仅包含一个数据元素。
情况3:插入具有两个数据元素的节点,其父级也包含两个数据元素。