编程基础 - 二叉排序树 (Binary Search Tree)

本文详细介绍了二叉排序树的概念、结构、查找、插入和删除操作,并提供了C++实现。通过中序遍历,二叉排序树能保证关键字的有序性。文章还举例说明了删除操作中如何保持树的完整性。
摘要由CSDN通过智能技术生成

编程基础 - 二叉排序树 (Binary Search Tree)

返回分类:全部文章 >> 基础知识

返回上级:编程基础 - 二叉树 (Binary Tree)

本文将介绍二叉排序树的基础知识,并用C++实现主要方法。

在查看本文之前,需要一些数据结构和程序语言的基础,要对“树”的概念有一些了解。

其中的方法还需要熟悉“栈(stack)”、“队列(queue)”和“递归”。



1 二叉排序树简述 (Introduction)

二叉排序树,也称二叉查找树和二叉搜索树,它可以是空树,或同时满足如下条件:

  • 每个结点都有一个关键字(Key),做为查找依据;
  • 左子树(非空):所有结点的关键字都小于根结点;
  • 右子树(非空):所有结点的关键字都大于根结点;
  • 左子树与右子树:都是二叉排序树;
  • 对非空二叉排序树进行中序遍历,可以得到从小到大的顺序排列的关键字顺序。

注意:关键字是否可以重复,需要根据实际需求判断。

之后实例全部使用同一组数据:{ 50, 26, 78, 92, 33, 67, 22, 30, 32 }

50
26
78
22
33
67
92
30
NULL
NULL
32

2 二叉排序树的结构 (Structure)

它的结构和二叉树完全相同:

// 二叉排序树节点
template<typename T>
class BSTreeNode
{
   
    public:
    T element; // 数据
    BSTreeNode<T>* leftChild; // 左指针
    BSTreeNode<T>* rightChild; // 右指针

    BSTreeNode(const T& e)
    {
   
        element = e;
        leftChild = 0;
        rightChild = 0;
    }
    ~BSTreeNode()
    {
   
        leftChild = 0;
        rightChild = 0;
    }
};

3 二叉排序树的查找 (Search)

查找从根结点开始,逐层开始进行比较,直到找到目标或没有找到目标。且是一个递归的过程。

具体查找过程:

  • (1)如果根结点为空,则查找不成功;
  • (2)如果根结点不为空,进行比较:
    • 如果等于根结点,查找成功;
    • 如果小于根结点,则查找根结点的左子树;
    • 如果大于根结点,则查找根结点的右子树;
  • (3)查找成功时,指针将停留在结点;
  • (4)查找不成功时,指针将为空。

下图展示了,查找36(蓝色),查找67(红色)的过程:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值