Python 基于链表的二叉树图书馆管理系统

Python 基于链表的二叉树图书馆管理系统,python,linked-list,binary-tree,Python,Linked List,Binary Tree,如何在python中使用链表实现图书馆管理系统的二叉树?希望这样: class BinaryTree: def __init__(self, key=None): self.key = key self.left = None self.right = None def set_root(self, key): self.key = key def inorder(self): if se

如何在python中使用链表实现图书馆管理系统的二叉树?

希望这样:

class BinaryTree:
    def __init__(self, key=None):
        self.key = key
        self.left = None
        self.right = None

    def set_root(self, key):
        self.key = key

    def inorder(self):
        if self.left is not None:
            self.left.inorder()
        print(self.key, end=' ')
        if self.right is not None:
            self.right.inorder()

    def insert_left(self, new_node):
        self.left = new_node

    def insert_right(self, new_node):
        self.right = new_node

    def search(self, key):
        if self.key == key:
            return self
        if self.left is not None:
            temp = self.left.search(key)
            if temp is not None:
                return temp
        if self.right is not None:
            temp = self.right.search(key)
            return temp
        return None


btree = None

print('Menu (this assumes no duplicate keys)')
print('insert <data> at root')
print('insert <data> left of <data>')
print('insert <data> right of <data>')
print('quit')

while True:
    print('inorder traversal of binary tree: ', end='')
    if btree is not None:
        btree.inorder()
    print()

    do = input('What would you like to do? ').split()

    operation = do[0].strip().lower()
    if operation == 'insert':
        data = int(do[1])
        new_node = BinaryTree(data)
        suboperation = do[2].strip().lower()
        if suboperation == 'at':
            btree = new_node
        else:
            position = do[4].strip().lower()
            key = int(position)
            ref_node = None
            if btree is not None:
                ref_node = btree.search(key)
            if ref_node is None:
                print('No such key.')
                continue
            if suboperation == 'left':
                ref_node.insert_left(new_node)
            elif suboperation == 'right':
                ref_node.insert_right(new_node)

    elif operation == 'quit':
        break

类二进制树:
定义初始化(self,key=None):
self.key=key
self.left=无
self.right=无
def set_根目录(自、键):
self.key=key
def索引器(自身):
如果self.left不是无:
self.left.inoder()
打印(self.key,end='')
如果self.right不是None:
self.right.inoder()
def insert_left(自身、新_节点):
self.left=新节点
def insert_right(自身,新节点):
self.right=新节点
def搜索(自我,密钥):
如果self.key==键:
回归自我
如果self.left不是无:
temp=自左搜索(键)
如果temp不是None:
返回温度
如果self.right不是None:
temp=自右搜索(键)
返回温度
一无所获
b树=无
打印('菜单(假定没有重复的键)')
打印('在根目录下插入')
打印('插入左侧')
打印('插入右侧')
打印('退出')
尽管如此:
print('按顺序遍历二叉树:',end='')
如果btree不是None:
btree.inoorder()
打印()
do=input('您想做什么?')。split()
operation=do[0]。strip().lower()
如果操作==“插入”:
data=int(do[1])
新节点=二进制树(数据)
子操作=do[2].strip().lower()
如果子操作=='at':
btree=新节点
其他:
位置=do[4]。剥离().lower()
键=int(位置)
参考节点=无
如果btree不是None:
ref_node=b树搜索(键)
如果ref_节点为None:
打印('没有这样的密钥')
持续
如果子操作==“左”:
参考节点。插入左侧(新节点)
elif子操作=='右':
参考节点。插入右侧(新节点)
elif操作==“退出”:
打破

您卡在哪里了?你的实现在哪里?我添加了一些函数来了解用户想要什么,你可以修改它,并使它成为你自己的应用程序。