[从头学数学] 第260节 Python实现数据结构:B+树
can can:
只是凭感觉似乎错了,哈哈,如果有问题可以自己斟酌一下~
[从头学数学] 第260节 Python实现数据结构:B+树
can can:
[code=python]
def del_node(n,kv):
if not n.isleaf():
p=bisect_right(n.ilist,kv)
if p==len(n.ilist):
if not n.clist[p].isempty():
return del_node(n.clist[p],kv)
elif not n.clist[p-1].isempty():
tran_l2r(n,p-1)
return del_node(n.clist[p],kv)
else:
return del_node(merge(n,p-1),kv) #这里应该是p-1
[/code]
[从头学数学] 第260节 Python实现数据结构:B+树
can can:
[code=python]
def merge(n,i):
if n.clist[i].isleaf():
n.clist[i].vlist=n.clist[i].vlist+n.clist[i+1].vlist
n.clist[i].bro=n.clist[i+1].bro
else:
n.clist[i].ilist=n.clist[i].ilist+[n.ilist[i]]+n.clist[i+1].ilist
n.clist[i].clist=n.clist[i].clist+n.clist[i+1].clist
for t in n.clist[i+1].clist: #这里需要添加这段代码,用来更改父节点指向
t.par = n.clist[i]
n.clist.remove(n.clist[i+1])
n.ilist.remove(n.ilist[i])
if n.ilist==[]:
n.clist[0].par=None
self.__root=n.clist[0]
del n
return self.__root
else:
return n
[/code]
[从头学数学] 第260节 Python实现数据结构:B+树
can can:
代码有几处错误:
[code=python]
def split_leaf(n2):
mid=self.L//2 # 奇数的话右边应该多一个
newleaf=Bptree.__Leaf(self.L)
newleaf.vlist=n2.vlist[mid:]
if n2.par==None:
newroot=Bptree.__InterNode(self.M)
newroot.ilist=[n2.vlist[mid].key]
newroot.clist=[n2,newleaf]
n2.par=newleaf.par=newroot
self.__root=newroot
else:
i=n2.par.clist.index(n2)
n2.par.ilist.insert(i,n2.vlist[mid].key)
n2.par.clist.insert(i+1,newleaf)
newleaf.par=n2.par
n2.vlist=n2.vlist[:mid]
newleaf.bro = n2.bro # 这里缺少该条语句
n2.bro=newleaf
[/code]
[从头学数学] 第260节 Python实现数据结构:B+树
qq_38631522:
你好,请问。代码中插入部分中有一行
n.vlist.insert(p, key_value)
其中insert是调用哪里的函数功能?