这是关于 T tree 这种数据结构的源代码。
偶然间看到 T tree 这种数据结构,就想自己实现一下,上网搜了搜,关于 这方面的资料并不多。
我也没找到精确的关于 T tree 的定义(或许找到了,但我不确定)。
我参考一些网上的定义,总结如下:
T tree 是一种二叉树;
有左子节点和右子节点的节点称为内部节点;
只有一个子节点的节点称为半叶节点;
没有子节点的节点称为叶节点;
节点中数据的个数小于一个最大值;
内部节点中数据的个数大于等于一个临界值,临界值小于等于最大值;
左子树与右子树的高度差不超过2;
差不多就这些了。
我的思路是这样的:
首先是四种旋转操作,熟悉 avl tree 的话,对这四种旋转操作应该不会陌生吧。
在旋转的过程中,可能会把半叶节点或是叶节点转化为内部节点,如果节点中元素的个数少于临界值,
就需要调整了(在插入操作过程中也会出现 把半叶节点或是叶节点转化为内部节点 的情况,但其中的元素个数不会少于临界值)。
调整的时候:
会先向自己的子节点或父节点借数据,借完之后,如果子节点或是 父节点为空,就将其合并,
合并后,只需调整平衡因子就行了,不必再旋转了;
如果子节点 或是父节点不为空,正常进行旋转操作就可以了。
插入操作:
如果待插入的数据小于该节点中的最小值,尝试在左子树中插入,
如果左子树的为空,且该节点不满,就把带插入数据放在这个节点里面作为最小值ÿ