gpt4 book ai didi

python - 使用 Python 将记录存储在二叉树中

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:13:54 27 4
gpt4 key购买 nike

我想将学生记录存储在二叉树中。我正在用 Python 实现它。

学生记录将具有三个值,

StudentName, RollNo, Grade

例子,

John 4 A
Josh 2 B
Kevin 3 A

我可以实现一个二叉树并在其中插入单个值。但是,要存储学生记录,我需要使用三棵二叉树吗?然后如何映射值?

这是一个简单的 B 树在 python 中的实现,具有单值插入。

#!/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

状态(获取所有记录) :-

输出:-

John 4 A
Josh 2 B
Kevin 3 A

最佳答案

如果查找单个记录所需的唯一键是名称,则可以使用按名称排序的树。但是,每个节点都必须存储 while 记录。您要么引入一个具有所有三个字段但定义了 < 的类型, > , 和 == (用于 Tree._find )仅比较名称,或添加对 Tree 的支持用于使用自定义比较器 函数。

后者更可取,因为它避免了为其他代码中的运算符建立奇怪的含义;如果实现 <,一个函数就足够了, 因为你可以写

if less(val,node.v): # ...
elif less(node.v,val): # ...
else: return node # equal

关于python - 使用 Python 将记录存储在二叉树中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52883147/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com