Python实现二叉搜索树(BST)及其基本操作详解

介绍

二叉搜索树(Binary Search Tree,简称BST)是一种常用的数据结构,其特点在于每个节点的值大于其左子树中任意节点的值,小于其右子树中任意节点的值。这种性质使得在BST中进行搜索、插入和删除等操作非常高效。

在本文中,我们将通过Python代码实现BST及其基本操作,包括节点的插入、查询、删除以及不同遍历方式的演示。

节点定义

首先,我们定义了二叉搜索树的节点类 BiTreeNode。每个节点包含数据、左孩子、右孩子和父节点。

class BiTreeNode:
    def __init__(self, data):
        # 节点初始化,包括数据、左孩子、右孩子和父节点
        self.data = data
        self.lchild = None
        self.rchild = None
        self.parent = None

二叉搜索树的实现

接下来,我们实现了二叉搜索树类 BST,包括树的初始化、节点的插入、查询和删除,以及不同遍历方式的实现。

class BST:
    def __init__(self, li=None):
        # 二叉搜索树初始化,根节点默认为空
        self.root = None
        if li:
            # 如果提供了列表,则通过非递归插入构建二叉搜索树
            for val in li:
                self.insert_no_rec(val)

    def insert(self, node, val):
        """
        递归插入节点。

        参数:
            node (BitreeNode): 当前节点。
            val: 要插入的值。

        返回:
            BitreeNode: 插入后的节点。
        """
        if not node:
            # 如果当前节点为空,则创建新节点
            node = 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
        return node

    def insert_no_rec(self, val):
        "&#
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值