我想将学生记录存储在二叉树中。我正在Python中实现它。
学生记录将具有三个值,
two :: Computation Int
two = name "two" $ pure 2
someComp :: Computation Int
someComp = name "two plus two" $ liftA2 (+) two two
示例
StudentName, RollNo, Grade
我可以实现一个二进制树,并在其中插入单个值。但是,要存储学生记录,我是否需要使用三个二叉树?然后如何映射值?
这是python中带有单值插入的简单B-Tree实现。
John 4 A
Josh 2 B
Kevin 3 A
推荐的实现方式是什么?
我想查询类似
#!/usr/bin/python
class Node:
def __init__(self, val):
self.l = None
self.r = None
self.v = val
class Tree:
def __init__(self):
self.root = None
def getRoot(self):
return self.root
def add(self, val):
if(self.root == None):
self.root = Node(val)
else:
self._add(val, self.root)
def _add(self, val, node):
if(val < node.v):
if(node.l != None):
self._add(val, node.l)
else:
node.l = Node(val)
else:
if(node.r != None):
self._add(val, node.r)
else:
node.r = Node(val)
def find(self, val):
if(self.root != None):
return self._find(val, self.root)
else:
return None
def _find(self, val, node):
if(val == node.v):
return node
elif(val < node.v and node.l != None):
self._find(val, node.l)
elif(val > node.v and node.r != None):
self._find(val, node.r)
def deleteTree(self):
# garbage collector will do this for us.
self.root = None
def printTree(self):
if(self.root != None):
self._printTree(self.root)
def _printTree(self, node):
if(node != None):
self._printTree(node.l)
print str(node.v) + ' '
self._printTree(node.r)
# 3
# 0 4
# 2 8
tree = Tree()
tree.add(3)
tree.add(4)
tree.add(0)
tree.add(8)
tree.add(2)
tree.printTree()
print (tree.find(3)).v
print tree.find(10)
tree.deleteTree()
tree.printTree()
输出:-
Get the rollNo where studentName='John'
4
:-
输出:-
Status (Fetch all the records)
答案 0 :(得分:0)
如果名称唯一需要查找单个记录的键,则可以使用按名称排序的一棵树。但是,每个节点必须存储 while记录。您可以引入具有所有三个字段但定义<
,>
和==
(用于Tree._find
)的类型以仅比较名称,或为{添加支持{1}}用于使用自定义的比较器函数。
后者是可取的,因为它避免了在其他代码中为运算符建立奇怪的含义;如果一个函数实现了Tree
,那么一个函数就足够了,因为您可以编写
<