只简单实现了插入功能
class entry(object):
def init(self,key,val):
self.key=key
self.value=val
class Node(object):
def init(self):
self.parent=None
self.entrys=[]
self.childs=[]
def addEntry(self,key,val):
n=entry(key,val) #生成一个对象
for i,j in enumerate(self.entrys):
if j.key>key:
self.entrys.insert(i,n)
break
else:
self.entrys.append(n)
return
def Nodesplit(self,tree):
left = Node()
right = Node()
left.entrys = self.entrys[:3]
right.entrys = self.entrys[4:]
left.childs = self.childs[:4]
right.childs = self.childs[4:]
if self.parent==None:
# node=Node()
# node.entrys.append(self.entrys[3])
# left.parent=self.parent=node
# node.childs.append(left)
# self.entrys=self.entrys[4:]
# self.childs= self.childs[4:]
# node.childs.append(self)
tree.root=Node()
tree.root.entrys.append(self.entrys[3])
left.parent = right.parent = tree.root
tree.root.childs.append(left)
tree.root.childs.append(right)
else:
for i, j in enumerate(self.parent.entrys):
if j.key > self.entrys[3].key:
self.parent.childs[i]=left
self.parent.childs.insert(i+1,right)
break
else:
self.parent.childs[-1]=left
self.parent.childs.append(right)
right.parent=left.parent=self.parent
self.parent.addEntry(self.entrys[3].key, self.entrys[3].value)
if( len(self.parent.entrys)>6):
self.parent.Nodesplit(tree)
return
class Tree(object):
def init(self):
self.root=None
self.size=6
def add(self,key,val):
temp = self.root
if temp==None:
temp=Node()
temp.addEntry(key,val)
self.root=temp
else:
while len(temp.childs)!=0: #等于0说明为叶子
for i,j in enumerate(temp.entrys): #默认从0开始
if j.key>key:
temp=temp.childs[i]
break
else:
temp=temp.childs[-1]
#退出while循环说明已经找到合适的节点,准备插入
temp.addEntry(key,val)
if len(temp.entrys)>6:
temp.Nodesplit(self)
if name == “main”:
tree=Tree()
for i in range(10):
tree.add(i,str(i))