数据结构与算法C++之二分搜索树

本文介绍了二分搜索树的查找效率优势,并详细解析了如何在C++中插入新节点,包括插入60、28和42的示例。同时阐述了二分搜索树的查找过程,通过查找42和59来说明。还提到了包含函数contain和查找函数search的实现,以及如何处理查找失败的情况。最后提到了测试程序读取"bible.txt"文件并查找"god"的应用。
摘要由CSDN通过智能技术生成

二分搜索树的优势

(1)查找表的实现-字典数据结构
在这里插入图片描述
(2)算法复杂度比普通数组,顺序数组低
在这里插入图片描述
总结如下
在这里插入图片描述
下面是二分搜索树(是棵二叉树)的定义
在这里插入图片描述
在这里插入图片描述
插入新节点 insert
(1)插入新元素60时,60比41大,60继续与41的右节点58比,60比58大,那么继续将60与58的右节点比,58没有右节点,那么就将60插入58的右节点位置处
在这里插入图片描述
(2)插入28,首先28比41小,那么28与41的左节点22比,28比22大,那么28继续与22的右节点33比,28比33小,那么继续将28与33的左节点比,33没有左节点,就将28放入33的左节点处
在这里插入图片描述
(3)插入42,42比41大,继续将42与41的右节点58比,42比58小,继续将42与58的左节点50比,42比50小,继续将42与50的左节点42比,42与42相等,就将新的42替换掉旧的42
在这里插入图片描述
二分查找树的 查找 search
(1)查找42,首先42比41大,继续将42与41的右节点58作比较,42比58小,继续将42与58的左节点50作比较,42比50小,继续将42与50的左节点作比较,42等于42查找成功
在这里插入图片描述
(2)查找59,59比41大,继续将59与41的右节点58比较,59比58大,继续将59与58的右节点60比较,59比60小,继续将59与60的左节点比较,60没有左节点,查找失败
在这里插入图片描述
程序中实现了两个函数
包含 contain,有该元素返回true,无返回false
查找 search,有该元素返回该元素的值,无返回空
search函数返回的是指针 Value*,这样在没有找到时可以返回空
search没有返回Node,因为如果返回的Node的话,那么需要将Node由private变为public,这样用户就需要了解Node的方法,这是不必要的,
而如果只使用Value,那么当没有查找到时,就会报错

下面是构建二分搜索树的程序,测试程序也在内,读入"bible.txt"文件,查找里面的“god”

#include <iostream>
#include <vector>
#include <string>
#include <ctime>  //time()函数
#include "FileOps.h"
using namespace std;

template<typename Key, typename Value>
class BST{
   

private:
    struct Node{
   
        Key key;
        Value value;
        Node *left;
        Node *right;

        Node(Key key, Value value){
   
            this->key = key;
            this->value = value;
            this->left = this->right = NULL;
        }
    };

    Node *root;
    int count;

public:
    BST(){
   
        root = NULL;
        count = 0;
    }
    ~BST(){
   
        // TODO: ~BST()
    }

    int size(){
   
        retu
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值