2-3查找树的定义
2-3查找树有两种类型的结点,分别为2结点(2-Node)、3结点(3-Node)。2结点保存1个Key和对应的Value,具两个结点指针,分别指向左右两个孩子结点,其中左结点是一个2-3结点,结点下所有的值都比父结点的Key值要小;右结点也是一个2-3结点,结点下所有的值比父结点的Key值要大。3结点保存两个Key和对应的Value,具有三个结点指针,分别指向左中右三个孩子结点,其中左结点是一个2-3结点,结点下所有的Key值比中间结点和右结点中最小的Key值还要小;中间结点也是一个2-3结点,结点下所有的Key值处于左结点和右结点的Key值之间;右结点也是一个2-3结点,结点下所有的Key值比左结点和右结点中最大的Key值还要大。
2结点和二叉排序树的结点定义一致,可以保存1个Key和对应的Value,具有两个结点指针。
typedef struct Two_Node {
ElemType data;
struct Node *lchild, *rchild; // 左、右孩子指针
} Two_Node, *Two_ThreeTree;
3结点不同于2结点,3结点可以保存两个Key和对应的Value,具有三个结点指针。
typedef struct Three_Node {
ElemType data1;
ElemType data2;
struct Three_Node *lchild; // 左孩子指针
struct Three_Node *mchild; // 中孩子指针
struct Three_Node *rchild; // 右孩子指针
} Three_Node, *Two_ThreeTree;
下图所示的树是一棵2-3查找树。2-3查找树是一个递归定义的数据结构,因此可以很方便的用递归算法对其进行操作。根据2-3查找树的定义,有左子树结点值<根结点值<右子树结点值,左子树结点值<中子树结点值<右子树结点值,所以如果对2-3查找树进行中序遍历,会得到一个升序序列。例如,对下图所示的2-3查找树进行中序遍历的结果为{1,2,3,4,5,6,7,8,9,10,11}。
参考:
[1] 数据结构————2,3查找树(介绍):https://blog.csdn.net/qq_29817901/article/details/89396557