课设——基于二叉排序树的查找

class BiNode:
    def __init__(self, key=None, lchild=None, rchild=None):
        self.key = key
        self.lchild = lchild
        self.rchild = rchild


class BiSortTree:
    def __init__(self, n):
        self.root = None
        self.n = n
        self.total_deep = 0

    def create_bst(self, seq: list):
        for i in range(self.n):
            s = BiNode(key=int(seq[i]))
            self.root = self.insert(self.root, s)

    def insert(self, r: BiNode, s: BiNode, deep=1) -> BiNode:
        if r:
            if s.key < r.key:
                deep += 1
                r.lchild = self.insert(r.lchild, s, deep)
            else:
                deep += 1
                r.rchild = self.insert(r.rchild, s, deep)
        else:
            self.total_deep = self.total_deep+deep
            return s
        return r

    def search(self, r: BiNode, k: int):
        if r:
            if r.key == k:
                return "查找成功", round(self.total_deep/self.n, 3)
            elif k < r.key:
                return self.search(r.lchild, k)
            else:
                return self.search(r.rchild, k)
        else:
            return "查找失败", 0

def search_team():
    numbers = list(management.keys())
    a = BiSortTree(len(numbers))
    a.create_bst(numbers)
    num = entry1.get()
    if num:
        result, asl = a.search(a.root, int(num))
        if result == "查找成功":
            entry2.insert(0, management[num].work)
            entry3.insert(0, management[num].school)
            entry4.insert(0, management[num].category)
            entry5.insert(0, management[num].competitor)
            entry6.insert(0, management[num].teacher)
            messagebox.showinfo(title="查询结果", message="查找成功,ASL=" + str(asl))
        else:
            messagebox.showerror(title="错误", message="查找失败")
    else:
        messagebox.showerror("提示","输入不能为空!")

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值