【发布时间】:2014-07-13 17:30:11
【问题描述】:
我正在使用 B-Tree,但我无法理解它是如何工作的。
寻找一些例子,我找到了这个page,它解释了如何为这个结构编写代码。
问题是:
class BTreeNode {
private
int *keys; // An array of keys
int t; // Minimum degree (defines the range for number of keys)
BTreeNode **C; // An array of child pointers
int n; // Current number of keys
bool leaf; // Is true when node is leaf. Otherwise false
public:
BTreeNode(int _t, bool _leaf); // Constructor
friend class BTree;
};
如果是我的树的节点,它存储了某个范围内的所有键,我可以在哪个部分找到我的数据? 假设我要存储一个字符串,如何获取该字符串?
我想得到类似的东西:
BTree.insert(1,'hello');
BTree.insert(2,' ');
BTree.insert(3,'world');
BTree.insert(4,'!');
然后,当我想通过其关联 ID 获取一些数据时...
BTree.getById(4);
但是,我该如何声明我的节点结构呢?
谢谢!
【问题讨论】:
-
什么是 B 树?也许你可以扩大B?二叉树?如果是二进制,则每个节点不能有超过 2 个子节点。
-
@armanali B 树是每个节点有零个或多个子节点的树。二叉树也是一样的,每个节点的最高限制是不超过两个孩子。 B-树通常使用每个节点的一页键,子键表示子键“小于”第一个键(左模式子),“介于”每对键(内部子级)和“大于” " 比最后一个键(最右边的孩子)。因此,具有 N 个键的页面的节点可以/将有 N+1 个子节点。二叉树是一个 B 树,每个节点有一个 单个 键(一页),因此可能有“较小”或“较大”的子节点。
-
@TomiSebastiánJuárez 您可以在闲暇时解释我在该评论中所说的任何内容不是正确的。 wiki 上的描述和图形,如果有的话,确认我所说的一切。 b 树的特定顺序的细节留给实现者,但一般算法和设计保持不变。
标签: c++ treenode b-tree abstract-data-type