当前位置: 首页 > news >正文

二叉搜索树的简单C++类实现

二叉搜索树(BST)是一种重要的数据结构,它对于理解树的操作和算法至关重要,其中序输出是有序的。本文通过C++实现一个BST的类,并在插入和删除节点时提供清晰的输出,可视化这些操作的过程。

二叉搜索树的节点结构

首先定义一个TreeNode结构来表示树中的每个节点。每个节点包含一个整数值、一个指向左子节点的指针和一个指向右子节点的指针。

struct TreeNode {int value;TreeNode *left;TreeNode *right;TreeNode(int x) : value(x), left(nullptr), right(nullptr) {}
};

二叉搜索树类的实现

创建了一个BinarySearchTree类,它包含一个指向树根的指针和几个私有的递归辅助函数。这些函数用于实现插入、中序遍历和删除整棵树的操作。

class BinarySearchTree {
private:TreeNode *root;// 递归帮助函数,用于插入值TreeNode* insert(TreeNode *node, int value) {if (node == nullptr) {std::cout << "Inserted " << value << " into the BST.\n";return new TreeNode(value);}if (value < node->value) {std::cout << "Inserting " << value << " to the left of " << node->value << ".\n";node->left = insert(node->left, value);} else if (value > node->value) {std::cout << "Inserting " << value << " to the right of " << node->value << ".\n";node->right = insert(node->right, value);}return node;}// 递归帮助函数,用于中序遍历void inorderTraversal(TreeNode *node) const {if (node != nullptr) {inorderTraversal(node->left);std::cout << node->value << " ";inorderTraversal(node->right);}}// 递归帮助函数,用于删除树void deleteTree(TreeNode *node) {if (node != nullptr) {deleteTree(node->left);deleteTree(node->right);std::cout << "Deleting node with value: " << node->value << "\n";delete node;}}public:BinarySearchTree() : root(nullptr) {}~BinarySearchTree() {deleteTree(root);}void insert(int value) {root = insert(root, value);}void inorderTraversal() const {std::cout << "Inorder Traversal: ";inorderTraversal(root);std::cout << std::endl;}
};

插入操作

insert函数中添加打印语句来显示插入过程。这些打印语句帮助我们可视化了插入的每一步。

中序遍历

中序遍历是一种遍历树的方法,它首先访问左子树,然后访问根节点,最后访问右子树。对于BST来说,中序遍历的结果是按排序顺序显示树中的所有值。

删除操作

BinarySearchTree的析构函数中,我们实现了deleteTree函数来删除整棵树。在删除每个节点之前,我们打印出该节点的值。

主函数

在主函数中,我们创建了一个二叉搜索树实例,并插入了一些值。然后,我们执行了中序遍历来查看树的内容。

int main() {BinarySearchTree bst;// 插入元素bst.insert(5);bst.insert(3);bst.insert(7);bst.insert(2);bst.insert(4);bst.insert(6);bst.insert(8);// 中序遍历二叉搜索树bst.inorderTraversal();return 0;
}

结果分析

当我们运行上述程序时,控制台输出显示了插入节点的过程,并在程序结束时显示了删除节点的过程。

Inserted 5 into the BST.
Inserting 3 to the left of 5.
Inserted 3 into the BST.
Inserting 7 to the right of 5.
Inserted 7 into the BST.
Inserting 2 to the left of 5.
Inserting 2 to the left of 3.
Inserted 2 into the BST.
Inserting 4 to the left of 5.
Inserting 4 to the right of 3.
Inserted 4 into the BST.
Inserting 6 to the right of 5.
Inserting 6 to the left of 7.
Inserted 6 into the BST.
Inserting 8 to the right of 5.
Inserting 8 to the right of 7.
Inserted 8 into the BST.
Inorder Traversal: 2 3 4 5 6 7 8
Deleting node with value: 2
Deleting node with value: 4
Deleting node with value: 3
Deleting node with value: 6
Deleting node with value: 8
Deleting node with value: 7
Deleting node with value: 5

通过这些输出可以清楚地看到二叉搜索树在插入和删除节点时的行为。

不过要注意,这个示例没有实现删除单个节点的功能。在实际应用中,删除操作通常需要考虑多种不同的情况,并且可能需要重新平衡树以保持其性能。

相关文章:

二叉搜索树的简单C++类实现

二叉搜索树&#xff08;BST&#xff09;是一种重要的数据结构&#xff0c;它对于理解树的操作和算法至关重要&#xff0c;其中序输出是有序的。本文通过C实现一个BST的类&#xff0c;并在插入和删除节点时提供清晰的输出&#xff0c;可视化这些操作的过程。 二叉搜索树的节点结…...

禁毒知识竞赛流程和规则

禁毒知识竞赛是一项全国性竞赛活动。有着深化全国青少年毒品预防教育&#xff0c;巩固学校毒品预防教育成果的重要作用。本文介绍一场禁毒知识竞赛的完整流程和规则&#xff0c;供单位组织此类活动时参考。 1、赛制 第一轮10进6&#xff0c;第二轮6进4&#xff0c;4支队伍决出…...

CSS 基础

文章目录 CSS 常见的属性CSS 常见样式行内样式内嵌样式导入样式 CSS 选择器标签选择器id选择器类选择器全局选择器属性选择器组合选择器 CSS 常见应用表格列表导航栏下拉菜单提示工具图片廊 CSS (Cascading Style Sheets&#xff0c;层叠样式表&#xff09;&#xff0c;是一种用…...

黑色翻页时钟HTML源码-倒计时单页翻页时钟

黑色翻页时钟HTML源码-倒计时单页翻页时钟这是一个类似fliqlo的黑色翻页时钟HTML源码&#xff0c;它仅包含一个HTML文件&#xff0c;上传到网站后即可使用。该时钟具有查看当前时间、秒表和倒计时功能&#xff0c;并且可以在页面的右下角进行设置。 红色动态炫酷数字时钟html网…...

2043杨辉三角(C语言)

目录 一&#xff1a;题目 二&#xff1a;思路分析 三&#xff1a;代码 一&#xff1a;题目 二&#xff1a;思路分析 1.通过杨辉三角&#xff0c;不难发现中间的数等于肩头两个数之和 2.但是当我们的输出结果&#xff0c;与杨辉三角的形式有所不同&#xff0c;但是我们可以找…...

【机器学习】从底层手写实现线性回归

【机器学习】Building-Linear-Regression-from-Scratch 线性回归 Linear Regression0. 数据的导入与相关预处理0.工具函数1. 批量梯度下降法 Batch Gradient Descent2. 小批量梯度下降法 Mini Batch Gradient Descent&#xff08;在批量方面进行了改进&#xff09;3. 自适应梯度…...

判断数组中对象的某个值是否有相同的并去重

如果你想判断数组中对象的某个值是否有相同的&#xff0c;并进行去重&#xff0c;你可以使用 JavaScript 中的一些数组方法和 Set 对象。以下是一个示例&#xff1a; // 原始数组包含对象 const array [{ id: 1, name: John },{ id: 2, name: Jane },{ id: 3, name: Doe },{ …...

Shell脚本 变量 语句 表达式

常见的解释器 #!/bin/sh #不推荐(了解) #!/bin/bash #!/usr/bin/python #!/bin/awk#!后跟的字符表示要启动的程序&#xff0c;该程序读取该文件执行。 #! 是一个约定的标记&#xff0c;它告诉系统这个脚本需要什么解释器来执行shell 函数 myShellName () {command1 }函数调用…...

MIT6.S081-实验准备

实验全程在Vmware虚拟机 (镜像&#xff1a;Ubuntu-20.04-beta-desktop-amd64) 中进行 一、版本控制 1.1 将mit的实验代码克隆到本地 git clone git://g.csail.mit.edu/xv6-labs-2020 1.2 修改本地git配置文件 创建github仓库&#xff0c;记录仓库地址 我的仓库地址就是htt…...

工具在手,创作无忧:一键下载安装Auto CAD工具,让艺术创作更加轻松愉悦!

不要再浪费时间在网上寻找Auto CAD的安装包了&#xff01;因为你所需的一切都可以在这里找到&#xff01;作为全球领先的设计和绘图软件&#xff0c;Auto CAD为艺术家、设计师和工程师们提供了无限的创作潜力。不论是建筑设计、工业设计还是室内装饰&#xff0c;Auto CAD都能助…...

第25节: Vue3 带组件

在UniApp中使用Vue3框架时&#xff0c;你可以使用组件来封装可复用的代码块&#xff0c;并在需要的地方进行渲染。下面是一个示例&#xff0c;演示了如何在UniApp中使用Vue3框架使用带组件&#xff1a; <template> <view> <button click"toggleActive&q…...

ubuntu apache2配置反向代理

1.Ubuntu安装apache sudo apt-get update sudo apt-get install apache2 2.apache2反向代理配置 sudo vim /etc/apache2/sites-available/000-default.conf 添加内容如下&#xff1a; <VirtualHost *:80># The ServerName directive sets the request scheme, host…...

【数据挖掘 | 关联规则】FP-grow算法详解(附详细代码、案例实战、学习资源)

! &#x1f935;‍♂️ 个人主页: AI_magician &#x1f4e1;主页地址&#xff1a; 作者简介&#xff1a;CSDN内容合伙人&#xff0c;全栈领域优质创作者。 &#x1f468;‍&#x1f4bb;景愿&#xff1a;旨在于能和更多的热爱计算机的伙伴一起成长&#xff01;&#xff01;&a…...

力扣题目学习笔记(OC + Swift) 11

11.盛最多水的容器 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明&#xff1a;你不能倾…...

JVM基础入门

JVM 基础入门 JVM 基础 聊一聊 Java 从编码到执行到底是一个怎么样的过程&#xff1f; 假设我们有一个文件 x.Java&#xff0c;你执行 javac&#xff0c;它就会变成 x.class。 这个 class 怎么执行的&#xff1f; 当我们调用 Java 命令的时候&#xff0c;class 会被 load 到…...

前端真的死了吗

随着人工智能和低代码的崛起&#xff0c;“前端已死”的声音逐渐兴起。前端已死&#xff1f;尊嘟假嘟&#xff1f;快来发表你的看法吧&#xff01; 以下方向仅供参考。 一、为什么会出现“前端已死”的言论 前端已死这个言论 是出自于2022年开始 &#xff0c;2022年下半年疫情…...

前后端分离开发

前期 前后端混合开发 后期 前后端分离开发...

向量数据库——AI时代的基座

向量数据库——AI时代的基座 1.前言 向量数据库在构建基于大语言模型的行业智能应用中扮演着重要角色。大模型虽然能回答一般性问题&#xff0c;但在垂直领域服务中&#xff0c;其知识深度、准确度和时效性有限。为了解决这一问题&#xff0c;企业可以利用向量数据库结合大模…...

【️什么是分布式系统的一致性 ?】

&#x1f60a;引言 &#x1f396;️本篇博文约8000字&#xff0c;阅读大约30分钟&#xff0c;亲爱的读者&#xff0c;如果本博文对您有帮助&#xff0c;欢迎点赞关注&#xff01;&#x1f60a;&#x1f60a;&#x1f60a; &#x1f5a5;️什么是分布式系统的一致性 &#xff1f…...

鸿蒙ArkTS Web组件加载空白的问题原因及解决方案

问题症状 初学鸿蒙开发&#xff0c;按照官方文档Web组件文档《使用Web组件加载页面》示例中的代码照抄运行后显示空白&#xff0c;纠结之余多方搜索后扔无解决方法。 运行代码 import web_webview from ohos.web.webviewEntry Component struct Index {controller: web_webv…...

【Java】网络编程-UDP回响服务器客户端简单代码编写

这一篇文章我们将讲述网络编程中UDP服务器客户端的编程代码 1、前置知识 UDP协议全称是用户数据报协议&#xff0c;在网络中它与TCP协议一样用于处理数据包&#xff0c;是一种无连接的协议。 UDP的特点有&#xff1a;无连接、尽最大努力交付、面向报文、没有拥塞控制 本文讲…...

【设计模式】之工厂模式

工厂模式 1.介绍 工厂模式&#xff08;创建型模式&#xff09;&#xff0c;是我们最常用的实例化对象模式&#xff0c;是用工厂方法代替new操作的一种模式&#xff1b;在工厂模式中&#xff0c;我们在创建对象时不会对客户端暴露创建逻辑&#xff0c;并且是通过使用一个共同的…...

70.爬楼梯

题目描述 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 注意&#xff1a; 给定 n 是一个正整数。 示例 1: 输入&#xff1a; 2 输出&#xff1a; 2 解释&#xff1a; 有两种方法可以爬到楼顶…...

【论文解读】ICLR 2024高分作:ViT需要寄存器

来源&#xff1a;投稿 作者&#xff1a;橡皮 编辑&#xff1a;学姐 论文链接&#xff1a;https://arxiv.org/abs/2309.16588 摘要&#xff1a; Transformer最近已成为学习视觉表示的强大工具。在本文中&#xff0c;我们识别并表征监督和自监督 ViT 网络的特征图中的伪影。这些…...

【Redis】AOF 基础

因为 Redis AOF 的实现有些绕, 就分成 2 篇进行分析, 本篇主要是介绍一下 AOF 的一些特性和依赖的其他函数的逻辑,为下一篇 (Redis AOF 源码) 源码分析做一些铺垫。 AOF 全称: Append Only File, 是 Redis 提供了一种数据保存模式, Redis 默认不开启。 AOF 采用日志的形式来记…...

C语言—每日选择题—Day50

一天一天的更新&#xff0c;也是达到50天了&#xff0c;精选的题有250道&#xff0c;博主累计做了不下500道选择题&#xff0c;最喜欢的题型就是指针和数组之间的计算呀&#xff0c;不知道关注我的小伙伴是不是一直在坚持呢&#xff1f;文末有投票&#xff0c;大家可以投票让博…...

[C/C++]——内存管理

学习C/C的内存管理 前言&#xff1a;一、C/C的内存分布二、C语言中动态内存管理方式三、C中动态内存管理方式3.1、new/delete操作符3.1.2、new/delete操作内置类型3.1.3、new/delete操作自定义类型 3.2、认识operator new和operator delete函数3.3、了解new和delete的实现原理3…...

PDF文件的限制编辑,如何设置?

想要给PDF文件设置一个密码防止他人对文件进行编辑&#xff0c;那么我们可以对PDF文件设置限制编辑&#xff0c;设置方法很简单&#xff0c;我们在PDF编辑器中点击文件 – 属性 – 安全&#xff0c;在权限下拉框中选中【密码保护】 然后在密码保护界面中&#xff0c;我们勾选【…...

Linux 中使用 docker 安装 Elasticsearch 及 Kibana

Linux 中使用 docker 安装 Elasticsearch 及 Kibana 安装 Elasticsearch 和 Kibana安装分词插件 ik_smart 安装 Elasticsearch 和 Kibana 查看当前运行的镜像及本地已经下载的镜像&#xff0c;确认之前没有安装过 ES 和 Kibana 镜像 docker ps docker images从远程镜像仓库拉…...

在Flutter中使用PhotoViewGallery指南

介绍 Flutter中的PhotoViewGallery是一个功能强大的插件&#xff0c;用于在应用中展示可缩放的图片。无论是构建图像浏览器、相册应用&#xff0c;还是需要在应用中查看大图的场景&#xff0c;PhotoViewGallery都是一个不错的选择。 添加依赖 首先&#xff0c;需要在pubspec…...

龙岗区做网站/如何制作一个自己的网页网站

这套面试题主要目的是帮助那些还没有java软件开发实际工作经验&#xff0c;而正在努力寻找java软件开发工作的朋友在笔试时更好地赢得笔试和面试。由于这套面试题涉及的范围很泛&#xff0c;很广&#xff0c;很杂&#xff0c;大家不可能一天两天就看完和学完这套面试宝典&#…...

大连普兰店网站建设/企业网站建站模板

wiki 地址&#xff1a;http://wiki.apache.org/solr/FrontPage&#xff0c; 里面有各个参数详细的介绍。 一.基本查询 q 查询的关键字&#xff0c;此参数最为重要&#xff0c;例如&#xff0c;qid:1&#xff0c;默认为q*:*&#xff0c; fl 指定返回哪些字段&#xff0c;用逗号…...

网站建设遵循原则/windows优化大师卸载不掉

近期使用Spark开发ML机器学习模型的时候&#xff0c;其中有一个部分需要交替搜索最优参数。 待搜索的参数空间有上万维&#xff0c;如果参数搜索串行执行&#xff0c;那么上千次的迭代计算大约需要10个小时&#xff0c;对于线上部署的模型是万万不可取的。 考虑到参数搜索部分…...

web前端做音乐网站/网站优化排名方法有哪些

由于使用display:none来设置的隐藏&#xff0c;每次刷新后对应的id为filePicker的div的宽高都默认为1px&#xff0c;按钮当然没有反应&#xff0c;网上找了很多具体都说不要使用display:none&#xff0c;使用css样式来设置。以下语句即解决了此问题。 <style> #filePick…...

wordpress网站建设中/常德政府网站

日常协同开发中&#xff0c;模块分配顺序、开发效率不一致的情况下会出现某一模块开发时需要调用其他开发人员所写模块未准备或者不清晰&#xff0c;代码搁置的情况下为了方便下次解决搁置代码、未完成项查找&#xff0c;常用开发工具为我们提供了task标签列表查找、通过标记TO…...

wordpress上传录音/所有关键词

CAD审图标记最新版是一款功能强大的cad审图软件。CAD审图标记免费版将图片中的细节进行重点标注,轻松帮助CAD制图人员进行修改。使用CAD审图标记最新版大大提高工作效率,SmartMark是一款免费cad审图软件,软件能够帮助用户在审图的过程中,标注下自己的审图意见,方便用户在下次修…...