BST——C++

二叉搜索树BST的C++实现 BST 包含的功能:插入,删除,查找,查找某一结点的后续和前驱,中序遍历和前序遍历 这里,用于实验的二叉树: //二叉搜索树BST #include #include using namespace std; class TreeNode{ public: int key; TreeNode* left; TreeNode* right; TreeNode* p;// 阅读详情

BST树,是指左子树上所有节点都小于双亲结点,右子树上所有节点都大于双亲结点的二叉树,BST树又称为二叉排序树和二叉搜索树,理想状态下真的很不错,如果不是频繁的对树进行增删其实哈、还好,嘻嘻,就怕你改成了斜树,那样就是废品。怎么说呢,这些搜索树,都是为了模仿二分查找的,好好学习吧少年。

#include<iostream>

/*
BST的类写好了,增删改查,emmm不难,但是发现书上给的代码有问题,大话数据结构324页,4-11行。
错的离谱,感觉就像开玩笑,可能是我看错了,我没按照书上写。
*/


using  namespace  std;

typedef struct  BiTNode
{
    int data;
    BiTNode * lchild, *rchild;
}BiTNode, *BiTree;

class BSTree
{
public:
    BSTree()//提供三种构造函数
    {
        root = NULL;
    }
    BSTree(int key)
    {
        root = NULL;
        Insert(key);
    }
    BSTree(int *arr,int len)
    {
        root = NULL;
        for(int i = 0;i < len;++i)
        {
            Insert(arr[i]);
        }
    }

    bool  Delete(int key)//删除某个给定值
    {
        BiTree p =NULL;
        if(Search(key,p))
        {
            Delete_son(p);
            return true;
        }
        return false;
    }

    void Show()//打印
    {
        OrderTraverse(root);
        cout<<endl;
    }

    bool  Search(int key,BiTree & p)//查找,找到返回1,p接收结点指针,没找到返回0,p接收查找的最后一步的结点
    {
        BiTree f = NULL;
        return SearchBST_son(root,key,f,p);
    }

    bool Insert(int key)//插入,找得到就不插入
    {
        BiTree p =NULL;
        if(!Search(key,p))
        {
            BiTNode * s = new BiTNode();
            s->data = key;
            s->lchild = s->rchild =NULL;
            if(!p)
            {
                root = s;
            }
            else if(key > (p->data))
            {
                p->rchild = s;
            }
            else
            {
                p->lchild = s;
            }
            return true;
        }
        return false;
    }

    ~BSTree()//析构,采取后序遍历的方式来进行析构
    {
        PostOrderTraverse_del(root);//后序遍历_del
        root = NULL;
    }

private:
    void Delete_son(BiTree &p)//删除函数的子函数
    {
        BiTree q,s;
        if(p->lchild == NULL)//没有左孩子,采取拷贝右孩子的内容,删除右孩子,类似于,剑指里面单链表结点的O(1)删除
        {
           q = p->rchild;
           *p = *(p->rchild);
           free(q);
        }
        else if(p->rchild == NULL)//同理
        {
           q = p->lchild;
           *p = *(p->lchild);
           free(q);
        }
        else//一时半会说不清楚,自己看看书。
        {
            q = p;
            s = p -> lchild;
            while(s->rchild)
            {
                q = s;
                s = s ->rchild;
            }
            p -> data = s ->data;
            if(q == p)
            {
                q -> lchild = s -> lchild;
            }
            else 
            {
                q -> rchild = s -> lchild;
            }
            delete s;
        }
    }

    bool SearchBST_son(BiTree T,int key,BiTree f,BiTree &p)//查找函数子函数
    {
        if(!T)
        {
            p = f;
            return false;
        }
        else if(key == T->data)
        {
            p = T;
            return true;
        }
        else if(key < T->data)
        {
            return SearchBST_son(T->rchild,key,T,p);
        }
        else
        {
            return SearchBST_son(T->rchild,key,T,p);
        }
    }

    void OrderTraverse(BiTree T) 
    {
        if(!T)return ;
        OrderTraverse(T->lchild);
        cout<<T->data<<"->";
        OrderTraverse(T->rchild);
    }

    void PostOrderTraverse_del(BiTree T)//后序遍历_del
    {
        if(!T)return ;  
        PostOrderTraverse_del(T->lchild);
        PostOrderTraverse_del(T->rchild);
        delete T;
    }

    BiTree root;
};


int  main()
{
    int arr[10] = {1,2,3,4,5,6,7,8,9,10};
    BSTree  bst(arr,10);
    bst.Show();
    bst.~BSTree();
    bst.Show();
}
C++进阶——二叉搜索树BST 阅读详情

相关推荐

二分搜索树排序 BST (c++实现)

二分搜索树排序 BST (c++实现)二分搜索树排序 BST (c++实现)二分搜索树排序 BST (c++实现)

二叉排序树(BST)的概念及其基本操作详细教程(C++)

二叉排序树的概念及其相关操作详细教程

smart_jackli的博客 1424

BST树节点的插入,删除和查找

实现了BST树节点的插入,删除和查找,其中删除只实现了一种,即用前驱替换,另外一种用后继替换没有实现。

BST树(二叉查找树)C++的实现

二叉查找树(Binary Search Tree),也称二叉搜索树、有序二叉树(ordered binary tree),排序二叉树(orted binary tree),是指一棵空树或者具有下列性质的二叉树: 若任意节点的左子树不空,则左子树上所有节点的值均小于它的根节点的值; 若任意节点的右子树不空,则右子树上所有节点的值均大于它的根节点的值; 任意节点的左、右子树也分别为二叉查找树; ......

qq_41078889的博客 1939

BST的创建及层序遍历下的分层打印.txt

此代码为原创代码 主要描述排序二叉树即BST的创建,以及二叉树的中序遍历,BST的广度遍历下的层序遍历。

C++ 二叉搜索树(BST)的实现方法

主要介绍了C++ 二叉搜索树(BST)的实现方法,非常不错,具有参考借鉴价值,需要的的朋友参考下

C++高级数据结构 | 二叉搜索树BST --- (Binary Search Tree)

文章目录什么是BSTBST的排序 什么是BST 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉查找树。 BST的排序 对于已知的二叉查找树的从小到大排序就是他的中序遍历顺序 即从根节点开始,若有左子树则递归输出左子树直到叶子结点,再输出自身,再递归输出右子树。 如图所示: 如图的中序遍历:...

Lebron 2710

Mmdetection用自己的数据集训练Mask_RCNN

将自己数据的标签写入配置文件,在data前一行添加自己的标签列表,同时在train,val,test中添加classes = classes,如果不添加,模型就会默认读取coco原始数据集的80个标签,与自己的数据集对应不上就会报错。2.打开第二个文件coco_instance.py,将data_root路径改为你自己coco数据集的位置(注意一定要以/结尾),修改输出图片尺寸(根据自己的数据集决定)3.将标注完的数据转为Mask_rcnn训练所需的数据集格式。4.将数据集放到训练代码文件夹中。

m0_64298393的博客 3473

C++数据结构之BST(二叉搜索树)的实现

冰糖雪梨的学习笔记 864

数据清洗(Data Cleansing)

数据清洗(Data Cleansing)是指对数据进行处理和纠错,以去除或修复数据集中存在的错误、不致、不完整和冗余的数据,从而使数据更加准确、可靠和有用。数据清洗是数据处理和数据分析中一个非常重要的步骤,它可以帮助我们提高数据的质量,从而提高数据分析和机器学习的准确性和可靠性。数据清洗是一个重要的过程,它可以帮助我们提高数据的质量,从而提高数据分析和机器学习的准确性和可靠性。在实际应用中,我们可以使用一些工具和技术来实现数据清洗,例如 Pandas、NumPy 和 OpenRefine 等。通过数据清洗,

meimei169500的博客 1万+

Apache-Plc4x-Modbus-Tcp学习记录(一)

Apache-Plc4x-Modbus-Tcp学习记录(一)

weixin_45325423的博客 6988

BSTree二叉树讲解

再比如统计单词次数,统计成功后,给定单词就可快速找到其出现的次数,单词与其出。首先查找元素是否在二叉搜索树中,如果不存在,则返回, 否则要删除的结点可能分下面四种情。看起来有待删除节点有4中情况,实际情况a可以与情况b或者c合并起来,因此真正的删除过程。a、从根开始比较,查找,比根大则往右边走查找,比根小则往左边走查找。每一个关键码key,都有与之对应的值Value,即的键值对。比如英汉词典就是英文与中文的对应关系,通过英文可以快速找到与其对应的中文,英。

2201_75324712的博客 316

【Spreadsheet】香港规范结构设计电子表格库开发方案

深入理解香港本地规范特点和要求结合国际先进标准(Eurocode) 的技术内容考虑香港地理环境特殊性 (台风、地质等)建立完善的质量控制体系保持持续更新维护的能力。

hmywillstronger的博客 1362

如何使用C++递归来复制一棵BST

小编先解释一下BST的全名是什么,不然大家就不知道是什么意思。BST的全名是bianry search tree. 中文名就叫做二叉搜索树。下面,小编就用这个BST来描述二叉搜索树了,因为这样简单明了。下面是有关在table.h 文件的函数prototype。//This is the table.h //Need to write the wrapper function and recursiv

CHNMSCS 671

Qt+PCL实战:如何用QVTKOpenGLNativeWidget高效渲染3D点云(附完整代码)

本文深入解析了Qt与PCL结合使用QVTKOpenGLNativeWidget进行高效3D点云渲染的实战技术。通过对比传统QVTKWidget,详细介绍了QVTKOpenGLNativeWidget在渲染效率、内存占用和兼容性方面的显著优势,并提供了完整的代码示例和性能优化策略,助力开发者在工业检测、自动驾驶等领域实现更高效的点云可视化。

keras9composer的博客 687

目前最新NIST随机数测试软件下载、安装、及使用教程

最近由于科研需要,在搞一些随机数的测试的事情,众所周知 随机数测试我们可以使用NIST的软件进行多大15项的随机测试,我也在网上查找了很多大牛的博客,但是都是年代久远,很多的链接现在都是物是人非,都是不能直接使用了,今天顺便抽点时间更新一下这个NIST软件的下载及使用。我们首先讲一下该软件的下载:1.我们直接取NIST的官网(https://csrc.nist.gov/)下载即可 ;链接如下:下载...

Miracle.Zhao的博客 3万+

BST二叉排序树C++实现

BST二叉排序/查找/搜索树C++实现 实现代码 /* author : eclipse email : eclipsecs@qq.com time : Thu May 07 10:28:33 2020 */ #include<bits/stdc++.h> using namespace std; struct Node { int data; Node *le...

qq_44486439的博客 554

【硬件】LT3763中文手册

1)精确控制输入和输出电流;2) 3000:1真彩色PWM™调光;3) ±1.5%电压调节精度;4) ±6%电流调节精度;5)6V至60 V输入电压范围;6)宽输出范围最高可达55V;7)<2µA关断电流;8)用于负载电流热控制的控制引脚;9)输入和输出电流监控和限制;10)开路、短路和C/10故障检测;11)适用于LED应用的PWM驱动器输出;12)热增强型28引脚FE封装。

qq_39200110的博客 489

C++重建搜索二叉树BST

用C++实现算法:根据一个搜索二叉树后序遍历的数组posArr,重建出整棵树返回新建树的头节点。 并通过随机新建BST、获得BST的后序遍历数组、判定两BST是否相等进行测试。

cascara的博客 569

【Unity实战篇 】| 游戏中实现镂空遮罩效果【矩形、圆形镂空遮罩】

本文来写一下怎样在Unity中完成一个 镂空遮罩 的效果。 镂空遮罩 比较常用的有两种:矩形镂空遮罩、圆形镂空遮罩。 镂空遮罩 在游戏中常被当做新手引导必备的内容,可以给玩家更多不一样的体验。 下面就一起来看一下怎样做出这种效果吧!

努力前行,总会成为自己心中的那道光 1万+

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

BST,AVL的c++实现

/************************************************************************ &amp;amp;amp;gt; File Name: BST.cpp &amp;amp;amp;gt; Author: wpf &amp;amp;amp;gt; Mail: wpf9264@163.com &amp;amp;amp;gt; Created Time: 2019年03月01日 星期

weixin_42405632的博客 307

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

C++ BST

BST(Binary Search Tree) 二叉搜索树又称二叉查找树或二叉排序树,在二叉搜索树中 若任意节点的左子树不空,则左子树上所有节点的值均不大于它的根节点的值; 若任意节点的右子树不空,则右子树上所有的节点的值均不小于它的跟节点的值; 一个n个节点的二叉树,如果二叉树是平衡的,则n个节点的二叉树的高度为log2(n+1),二叉树的查找效率为O(log2n),如果二叉树完全不平衡,则其深度可达到n,查找效率为O(n),退化为顺序查找。因此为了获得较好的查找性能,就要构造一个平衡的二叉排

b711183612的专栏 559

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

BST(java和c++实现)

import jdk.dynalink.beans.StaticClass; public class BST_Test { public static void main(String[] args) { System.out.println("helloworld"); int [] a = {62,88,58,47,35,73,51,99...

weixin_39804483的博客 427

如何用C++递归来删除所有的BST节点

关于BST的知识点,小编不在这里细讲了,不懂的大家自行百度吧或者查找有关资料。但是,小编还是会告诉你BST的全名是啥,不然你们查资料太费事了。BST的全名是binary search tree。大概中文名就叫做二叉搜索树。下面就展示如何用C++代码来实现这道题目//This is the table.h file //This file contains the struct and class /

CHNMSCS 742

using c++ in BST search,insert,delete

//using c++ in BST #include<iostream> using namespace std; class BST{ int data; BST *left,*right; public: BST(); // Default constructor. BST(int); // Parameterized...

hellobettershero的博客 341

C++:BST、AVL、红黑树

BST:简单但不平衡,适合小规模或静态数据。AVL 树:严格平衡,查询性能最佳,适合查询密集场景。红黑树:近似平衡,插入/删除高效,适合动态数据维护,是实际应用中最常用的平衡树。

hu_yuchen的博客 1190
上一篇: 与这个美丽的世界说再见的atoi——使用字符串来判断是否溢出
下一篇: 最短路径——Floyd算法
恩嗯
博客等级 码龄8年 47粉丝 112原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值