B树的插入与查找
来源:互联网 发布:淘宝年销售额 编辑:程序博客网 时间:2024/05/11 14:38
template <typename K, int M>bool BTree<K, M>::Insert(const K& key){//尚没有结点,直接改_root即可if (this->_root == NULL){this->_root = new Node();this->_root->_keys[0] = key;++this->_root->_size;return true;}Pair<K,M> pair = this->Find(key);if (pair._second != -1){return -1; //已存在,无需插入}Node* cur = pair._first;Node* parent = cur->_parent;K insertKey = key;while (true){//进行插入this->_InsertKey(cur, insertKey);//小于M,无需分裂if (cur->_size < M){return true;}//分裂调整int mid = (cur->_size - 1) / 2;//减一是为了防止M为偶数Node* right = new Node();int index = 0;//拷贝_keys[]for (int i = mid + 1; i < cur->_size;++i){right->_keys[index++] = cur->_keys[i];++right->_size;}index = 0;//拷贝_subs[]for (int i = mid + 1; i <= cur->_size; ++i){right->_subs[index++] = cur->_subs[i];if (cur->_subs[i])cur->_subs[i]->_parent = right;}insertKey = cur->_keys[mid];cur->_size = (cur->_size - 1) / 2;if (parent == NULL)//cur为根节点{Node* tmp = new Node();tmp->_keys[0] = insertKey;++tmp->_size;tmp->_subs[0] = cur;tmp->_subs[1] = right;cur->_parent = right->_parent = tmp;this->_root = tmp;break;}else{right->_parent = parent;//parent->_subs[cur->_size + 1] = right;错误index = M - 1;while (parent->_subs[index] != cur){parent->_subs[index + 1] = parent->_subs[index];--index;}parent->_subs[index + 1] = right;cur = parent;parent = cur->_parent;}}return true;}template <typename K,int M>Pair<K, M> BTree<K, M>::Find(const K& key)const{Node* cur = this->_root;Node* parent = NULL;int index = 0;while (cur){while (index < cur->_size){if (cur->_keys[index] < key){++index;}else if (cur->_keys[index] == key){return Pair<K,M>(cur, index);}else{break;}}parent = cur;cur = cur->_subs[index];index = 0;}return Pair<K, M>(parent, -1);}template <typename K,int M>void BTree<K, M>::_InsertKey(Node* cur, const K& key){//直接插入法int index = cur->_size - 1;while (index >= 0 && key < cur->_keys[index]){cur->_keys[index + 1] = cur->_keys[index];--index;}cur->_keys[index + 1] = key;++cur->_size;}
0 0
- B树的插入与查找
- B-树的插入、查找、删除
- B-树的插入、查找、删除
- 29、B-树的插入、查找、删除
- B-树的插入、查找、删除
- 数据结构——B-树的查找和插入
- B树的查找、插入、删除(附源代码)
- B树的查找、插入、删除(附源代码)
- B树的研究(查找、插入、删除)
- 二叉查找树的插入与删除
- 二叉查找树的插入与遍历
- 二叉查找树的搜索与插入
- B树的插入与删除
- B树的插入、删除与遍历
- B-树/B+树/B*树详解(查找+插入)
- B树的定义与查找
- C++实现B-树插入删除查找
- B树的插入
- java读书笔记
- java中 类和对象
- 剑指offer(39)-和为S的两个数字
- elasticsearch java 增删改查 版本1
- php中异常处理方法
- B树的插入与查找
- 译码器的定义及功能
- Android Studio 导入 GitHub 项目详解
- [Android]Android之解析zip
- pcDuino 3b安装OpenCV3.1.0
- 144BinaryTreePreorderTraversal
- 【VS开发】【DSP开发】TCP和UDP数据包结构
- Java桌面程序打包成exe可执行文件
- 第十六周--阅读程序