二叉排序树

前言

每一次写博客都有一个前言,这个前言虽然没有介绍什么具体的知识内容。但是可以记录我当前面临的困境和事情,也可以作为自己的一个心路历程来记录吧。最近在看STL,看到红黑树这一部分的时候,突然想起来之前数据结构里面的二叉排序树还没有实现,就突发奇想将这一部分写出来。另外也是对自己的数据结构的一个复习,为后面的实习找工作做准备吧。

原理

这里面的原理很简答,如果你是考研复试数据结构的话这个是相当重要的内容,需要自己手撸一次代码这样你才能记得更加清楚。下面的对于二叉排序树的定义来源于百度百科

一棵空树,或者是具有下列性质的二叉树 :

  1. 若左子树不空,则左子树上所有结点的值均小于它的根结点的值;
  2. 若右子树不空,则右子树上所有结点的值均大于它的根结点的值;
  3. 左、右子树也分别为二叉排序树;
  4. 没有键值相等的结点。

在这里插入图片描述
这就是一棵二叉排序树,我们对于他的主要操作就是查找插入,再加上一个maxmin操作。
首先,查找就是和根结点比较如果比根结点大就转向右子树,比根结点小就转向左子树。直到找到目标结点或者找到结点为空。插入操作首先是找到应该查找的位置,然后将结点放置于目标位置,这个结合代码更好理解。
但是这里面的max和min和普通的方法不一样,对于max来说就是一直找结点的右子树,直到找到没有右子树的结点为止;相应的min就是一直找结点的左子树,直到找到没有左子树的结点为止。时间复杂度应该是O(logn)

结构

二叉排序树的结构和二叉树的结构完全一致,

class search_tree {
   
    private:
        class node {
   
        public:
            int data;
            node* lchild;
            node* rchild;
            node(const int& val) : data(val), lchild(nullptr), rchild(nullptr) {
   }
        };
        typedef node *point_node;
        struct node* head;
        void _insert(point_node &point, const int& val);
        bool _find(point_node point, const int& val);
        int _max(point_node point)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值