【数据结构5】二叉搜索树(插入、查询、删除)

1 二叉搜索树
1.1 二叉搜索树-插入
1.2 二叉搜索树-查询
1.3 二叉搜索树-删除

1 二叉搜索树

二叉搜索树是一颗二叉树且满足性质:设是二叉树的一个节点。
如果y是x左子树的一个节点,那么y.key< x.key;如果y是x右子树的一个节点,那么y.key > x.key。

二叉搜索树的操作:查询、插入、删除

在这里插入图片描述

1.1 二叉搜索树-插入

class BiTreeNode:
    def __init__(self, data):
        """
        初始化二叉树节点
        :param data: 节点的值
        """
        self.data = data  # 节点的值
        self.lchild = None  # 左子节点
        self.rchild = None  # 右子节点
        self.parent = None  # 父节点


class BST:
    def __init__(self, li: list):
        """
        初始化二叉搜索树,并插入给定的值
        :param li: 包含插入值的列表
        """
        self.root = None  # 初始化根节点为空
        if li:
            for val in li:
                self.insert_no_rec(val)  # 使用非递归插入方法将列表中的值插入树中

    def insert(self, node, val):
        """
        递归插入节点到二叉搜索树中
        :param node: 当前节点
        :param val: 要插入的值
        :return: 插入后的节点
        """
        if not node:
            # 如果当前节点为空,则创建一个新节点作为叶节点
            return BiTreeNode(val)
        elif val < node.data:
            # 如果要插入的值小于当前节点的值,则递归插入到左子树
            node.lchild = self.insert(node.lchild, val)
            node.lchild.parent = node  # 更新左子节点的父节点
        elif val > node.data:
            # 如果要插入的值大于当前节点的值,则递归插入到右子树
            node.rchild = self.insert(node.rchild, val)
            node.rchild.parent = node  # 更新右子节点的父节点
        # 如果要插入的值等于当前节点的值,则不做任何操作(BST中不允许重复值)
        return node

    def insert_no_rec(self, val):
        """
        非递归插入节点到二叉搜索树中
        :pa
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值