Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >插入带有父指针的Btree

插入带有父指针的Btree
EN

Stack Overflow用户
提问于 2018-06-02 09:28:14
回答 1查看 120关注 0票数 2

我试着用java语言为Btree写了一个插入代码,但是不能正确地拆分节点,有没有人能给我一个在Btree中插入、拆分和nonfullInset的好算法呢?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2019-04-08 09:37:09

假设每个节点:

  • 的最大子项数为D,
  • 的最大键数为D-1,
  • 的最小子项数为d= D/2,
  • 的最小键数为K= D/2-1

以下是算法:

  • Insert:搜索树以查找包含键的叶节点。插入钥匙。查看密钥是否溢出(密钥数量大于D-1),如果不是,则操作完成。如果超过飞行,将节点拆分为2个节点(本身和一个新节点),将最后(k)个关键字移动到新节点,使节点(叶节点)保留k +1个关键字。将叶子节点中的最后一个关键字移动到父节点。如果parent已超载,请重复这些步骤。
  • Delete:搜索树以查找包含要删除的键的节点。可能有2例。容器节点是叶节点,或者是内部非叶节点。如果是内部节点,则首先在节点中查找键的直接前置节点,该节点总是来自前导节点。然后用这个前置密钥替换该密钥。现在,您需要从叶子节点中删除键。(请注意,从内部节点删除总是减少到从叶节点删除)。如果是叶节点,则从叶节点中删除键。检查叶节点是否在流下(少于k个key),如果不是,则操作完成。然而,如果在飞行中,可能有3个案例。如果节点具有至少具有k+1关键帧的左侧同级节点,则通过父节点执行右旋转。否则,如果节点具有至少具有k+1关键帧的右同级节点,则通过父节点执行左旋转。否则,如果该节点没有任何至少具有k+1键的同级节点,则将该节点与其一个同级节点连接起来,同时从父节点中取出一个键。然后检查父节点是否在运行中,如果在运行中重复这些步骤来修复parent.
  • Search:类似于二进制搜索树,主要区别是现在您还需要在每个节点中执行搜索,由于每个节点都有排序的键,因此您可以在每个节点上执行二进制搜索。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50655418

复制
相关文章
iOS开发中子类指针指向父类指针
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/69660693
用户1451823
2018/09/13
1.2K0
BTree
image.png mysql主要是B+ 和hash结构 image.png image.png image.png image.png image.png image.png image.png 更适合做范围查询 可以横向 image.png 链表 image.png 若想利用索引达到预想的提高查询速度的效果,我们在添加索引时,必须遵循以下原则 #1.最左前缀匹配原则,非常重要的原则, create index ix_name_email on s1(
大学里的混子
2019/03/04
5440
Btree详解
B树的插入、删除操作需要保证B树的平衡性,即每个节点的关键字数目都不能超过上限和下限,这一点需要在插入、删除操作中进行调整。 B树的搜索操作与二叉搜索树类似,但B树的搜索效率更高,因为B树的每个节点存储的关键字数量更多,可以减少搜索次数。 总之,B树是一种高效的数据结构,可以在大规模数据处理中发挥重要作用。
红目香薰
2023/10/11
6530
Btree详解
【数据结构】树——二叉搜索树(C++)
不移动大量数据可以用链表实现,但是寻找合适的位置还得遍历每个结点的data。如何高效的进行此操纵呢。
半生瓜的blog
2023/05/13
2140
【数据结构】树——二叉搜索树(C++)
jdk源码分析红黑树——插入篇1.插入root2.父黑3.父红4.父红,叔红5.1父红,叔黑,外侧子孙5.2父红,叔黑,内侧子孙
红黑树是自平衡的排序树,自平衡的优点是减少遍历的节点,所以效率会高。如果是非平衡的二叉树,当顺序或逆序插入的时候,查找动作很可能会遍历n个节点 红黑树的规则很容易理解,但是维护这个规则难。 一、规则 1.每个节点要么是红色、要么是黑色 2.根节点一定是黑色 3.红色节点不可以连续出现(父节点、子节点不可同时为红) 4.从任意节点出发,到树底的所有路线,途径的黑节点数量必须相同 在修改红黑树的时候,切记要维护这个规则。一般默认插入红色节点(除非是root节点),插入后再进行旋转和颜色变换 二、旋转、变换技巧
用户1174983
2018/02/05
7230
jdk源码分析红黑树——插入篇1.插入root2.父黑3.父红4.父红,叔红5.1父红,叔黑,外侧子孙5.2父红,叔黑,内侧子孙
「Mysql索引原理(二)」Mysql高性能索引实践,索引概念、BTree索引、B+Tree索引
1. 索引是什么 2. 索引的类型 3. BTree索引 概念 举例:以5阶数为列 4. B+Tree索引 概念 5阶B+Tree插入举例 B+树的优点 可以使用B+树索引的查询类型 B+Tree索引的限制
源码之路
2020/09/03
1.3K0
BTree源码分析
本文是介绍BTree文章的下篇,在BTree实现原理上篇主要介绍实现原理,下篇主要介绍btree源码实现。
数据小冰
2022/08/15
7800
BTree源码分析
BTree实现原理
小编在看etcd存储(store)模块的时候,发现它在进行key和keyIndex转换的时候,用到了btree包(http://godoc.org/github.com/google/btree)。btree是Google开源的一个Go语言的BTree实现,整个代码不到1000行,实现的非常简练,组织分层也做的很好,并对gc和并发读写做了很多优化,值得一读。小编打算用两篇文章讲解BTree内容,本文上篇主要介绍实现原理,下篇主要介绍btree源码实现。
数据小冰
2022/08/15
1.5K0
BTree实现原理
手写一个简单的Database7(译文)
译注:cstack在github维护了一个简单的、类似sqlite的数据库实现,通过这个简单的项目,可以很好的理解数据库是如何运行的。本文是第七篇,主要是对B-tree的介绍
GreatSQL社区
2023/02/22
2440
Mysql数据库-索引
MySQL索引(index): 是帮助MySQL高效获取数据的数据结构,所以索引的本质就是数据结构!
Devops海洋的渔夫
2022/01/17
2.2K0
Mysql数据库-索引
golang源码分析:btree
github.com/google/btree是golang实现的一个平衡多叉树。它是etcd索引使用的树形结构。它使用起来非常简单。
golangLeetcode
2023/09/20
5100
golang源码分析:btree
mysql索引原理,看这篇就够啦
网上已经有了很多相关mysql索引原理的文章,但是都存在一些问题,有的是直接复制别人的比较老的文章,有的直接开篇讲B+Tree的原理,过程不是很清楚,即使原理讲清楚了,没有各种数据结构的对比也很难体现出B+Tree的优越性,其实我觉得从一些问题来看,然后根据发现问题解决问题的思路来看,这样可能学习效果会更好,所以写了这篇文章,希望你能喜欢
程序员小饭
2020/09/07
4180
Postgresql源码(30)Postgresql索引基础B-linked-tree
《Postgresql源码(30)Postgresql索引基础B-linked-tree》
mingjie
2022/07/14
5700
Postgresql源码(30)Postgresql索引基础B-linked-tree
Postgresql源码(26)Postgresql索引基础B-linked-tree
《Postgresql源码(30)Postgresql索引基础B-linked-tree》
mingjie
2022/05/12
4830
Postgresql源码(26)Postgresql索引基础B-linked-tree
【说站】mysql中BTree索引的理解
非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树(简单说, 左边比自己小,右边比自己大)
很酷的站长
2022/11/23
8660
【说站】mysql中BTree索引的理解
数据结构:C语言实现二叉树及相关操作(递归,迭代)
#include <stdlib.h> #include <stdio.h> #include <unistd.h> typedef struct node { int item; struct node *left; struct node *right; }node; node *stack[512]; int top = 0; void init_stack() { top = 0; } void push(node *p) { stack[top++
Gabriel
2022/11/15
3600
为什么无返回值的链表的插入操作头结点一定要用指向指针的指针
前言: 为什么链表的插入操作头结点一定要用指向指针的指针?之前自己对这个问题总是一知半解,今天终于花了点时间彻底搞懂了。 总的来说这样做的目的是为了应对“空链表”的情况。为了防止往一个空链表中插入一个结点时,新插入的结点那就是链表的头指针,这时如果链表的结点是一级指针的话,那么出了链表插入函数的作用域后,头结点又回到了原来的空值。 比如下面的一段程序 1 // 链表的头指针为什么是指向指针的指针.cpp : 定义控制台应用程序的入口点。 2 // 3 4 #include "stdafx.h"
用户1215536
2018/02/05
1.3K0
为什么无返回值的链表的插入操作头结点一定要用指向指针的指针
索引的数据结构及算法原理--简介和索引本质
本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题。特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BTree索引,哈希索引,全文索引等等。为了避免混乱,本文将只关注于BTree索引,因为这是平常使用MySQL时主要打交道的索引,至于哈希索引和全文索引本文暂不讨论。 文章主要内容分为三个部分。
陈不成i
2021/06/08
1.1K0
C++小知识系列之“父类指针”和dynamic_cast!
父类指针也可以称为基类指针,当父类(基类)指针指向派生类(子类)指针的时候,可以触发“多态的效果”。不过本文的重点不在“多态”,而是聊聊当父类指针和子类指针互相赋值时需要注意的问题。
老潘
2023/10/19
6230
C++小知识系列之“父类指针”和dynamic_cast!
点击加载更多

相似问题

C++,BTree插入

20

如何在btree中插入结构

11

btree的插入复杂度是多少?

13

btree程序崩溃可能是由于指针

12

插入带有“标识”的父-子

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文