二叉查找树

news/2025/1/15 23:07:52/文章来源:https://www.cnblogs.com/codels/p/18673885

二叉查找树

对于任意一棵子树,其左子树比根节点小,右子树比根节点大。即:左 < 根 < 右

查找

比较目标值与根节点的大小关系,

  • 大就往右边找;
  • 小就往左边找;
  • 直到找到为止,如果到最后没有找到,则返回 nullptr
Node * BST::searchByIter(Node * bst, DataType target) {while (bst != nullptr) {//目标值比当前值大,往右走if (target > bst->data) {bst = bst->right;}//目标值比当前值小,往左走else if (target < bst->data) {bst = bst->left;}//不大不小,刚刚好else {return bst;}}//如果元素在树中,在前面循环执行的过程中就会返回,如果程序走到这里,就说明树中不存在该目标元素,返回空return nullptr;
}

获取最值

二叉查找树的特性是“左小右大”,所以找最大值直接向树的最右端找,找最小值直接去树的最左端找。

获取最大值:

DataType BST::getMax(Node * root) {//寻找树最左端的值,即最小值while (root->right != nullptr) {root = root->right;}return root->data;
}

获取最小值:

DataType BST::getMin(Node * root) {while (root->left != nullptr) {root = root->left;}return root->data;
}

插入节点

  • 若节点为空:分配一个节点
  • 非空,比较大小,往对应的方向递归,直至为空;
void BST::insert(Node *& root, DataType target) {//为空,分配一个空间if (root == nullptr) {root = new Node();root->data = target;root->left = root->right = nullptr;}//比当前节点值小,向左找节点插入else if (target < root->data) {root->left = insert(root->left, target);}//比当前节点值大,向右找节点插入else if (target > root->data) {root->right = insert(root->right, target);}//else target存在,什么都不做return root;
}

删除节点

  • 节点为空:不可操作
  • 节点存在:
    • 要删除的节点是叶子节点:直接删除
    • 要删除的节点只有一个子节点:用该节点的子节点代替当前节点
    • 要删除的节点有两个子节点:找左子树中最大的节点或者右子树中最小的节点来代替当前要删除的节点
Node * BST::delete(Node *& root, DataType target) {if (root == nullptr) {cout << "Node is not exist!\n";}//大了else if (target > root->data) {}//小了else if (target < root->data) {}//找到了else {//左右子树都存在if (root->left != nullptr && root->right != nullptr) {}//当前节点是叶子节点else if (root->left == nullptr && root->right == nullptr) {}else if (root->left == nu)}return root;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/869828.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Diary - 2025.01.15

pkuwc 烂完了,😭😭😭其实是 pkuwc2024 的东西。 Day 0 坐飞机坐飞机,嘟嘟嘟。 大飞机!!!!!!!! 我觉得最厉害的是这个飞机有 3D 地图啊,太帅了!!!但是比较悲伤的是我直到要到了才知道,前面都在看 B 站缓存的视频😭。 感觉,太美丽了杭州!!! 坐飞机的时…

floor_plan_meshproject增加角度正则损失

数据结构 data.x #(128, 16) 16 = triangles(9) + confidence(7) """ 每个元素 [x1, y1, z1, x2, y2, z2, x3, y3, z3, c_v1, c_v2, c_v3, c_e1, c_e2, c_e3, c_f] """ data.y #(128)encoded_x #(128, 576) encoded_x_conv # (2, 96, 576) …

2025.1.15 html基础

学习了html的基础知识,包括:n越大,字体越小换行标签表示一个完整的段落水平线标签链接: 内容 例如: <! --a页面-->这是A页面。<! --b页面-->这是B页面。在浏览器中点击“这是A页面”,会跳转到b页面。

位图有关的格式信息

GetObject(hBitmap, sizeof(BITMAP), (LPSTR)&bmp); 获取 HBITMAP 句柄包含的位图信息结构,不包含像素数据内容。 typedef struct tagBITMAP {   LONG bmType; // 位图类型,必须为 0   LONG bmWidth; // 位图宽度(以像素为单位) …

Centos7.9安装kerberos

Centos7.9安装kerberos@目录一、背景二、Kerberos安装部署2.1kerberos服务端必要软件安装2.2配置krb5.conf2.3配置kdc.conf2.4配置kadm5.acl2.5创建Kerberos数据库2.6启动Kerberos服务2.7创建Kerberos管理员principal2.8客户端安装kerberos2.9Kerberos功能验证本人其他相关文章…

并发编程 - 初识线程

线程是操作系统单独执行任务的最小单元,分前台和后台,有优先级,经历多个状态。C#可设置线程优先级和类型,控制线程状态的方法有Start、Sleep等,但Suspend和Abort已被弃用。多线程编程需通过同步机制控制线程执行。01、什么是线程? 要深刻理解什么是线程,就需要了解计算机…

Wgpu图文详解(05)纹理与绑定组

前言 什么是纹理? 纹理是图形渲染中用于增强几何图形视觉效果的一种资源。它是一个二维或三维的数据数组,通常包含颜色信息,但也可以包含其他类型的数据,如法线、高度、环境光遮蔽等。纹理的主要目的是为几何图形的表面提供详细的视觉效果,使其看起来更加真实和复杂。而我…

DeepSeek V3:AI 模型的游戏规则改变者

DeepSeek V3:AI 模型的游戏规则改变者 什么是DeepSeek V3? DeepSeekDeepSeek V3:AI 模型的游戏规则改变者什么是DeepSeek V3? DeepSeek V3是一款具有革命性的混合专家(MoE)模型,总参数达6710亿,每个标记激活370亿参数 。MoE方法允许多个专门模型(即“专家”)在门控网…

Opencv 的下载安装和VisualStudio配置

本文详细介绍了Windows系统下Opencv 的下载安装和VisualStudio配置过程。Opencv 的下载安装和VisualStudio配置 1 opencv-windows的下载 1.1 github直接下载链接(需要外网链接) 最新4.10.0版本的下载链接为: https://github.com/opencv/opencv/releases/download/4.10.0/openc…

G1原理—8.如何优化G1中的YGC

大纲 1.5千QPS的数据报表系统发生性能抖动的优化(停顿时间太小导致新生代上不去) 2.由于产生大量大对象导致系统吞吐量降低的优化(大对象太多频繁Mixed GC) 3.YGC其他相关参数优化之TLAB参数优化 4.YGC其他相关参数优化之RSet、PLAB和大对象的处理优化1.5千QPS的数据报表系统发…

【JavaSecLab靶场】Java综合漏洞平台

免责声明: 请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与作者无关。在我们平时的网络安全工作中,经常会面对各种各样的挑战。比如,进行定期的漏洞扫描、代码审计,甚至是参与红蓝对抗演练时,发现漏洞后往往需要及时将其修复。 最近,我接触到了一款开…

黑群晖最新安装方式|RR新手

引导盘制作 1、下载最新的黑群晖引导镜像原版链接:wjz304/rr 百度云盘:链接:https://pan.baidu.com/s/12z3v_kVYUDdWNzWBWN_NTQ?pwd=e67k2、将下载好的压缩包解压,得到一个后缀为img的文件。3、使用写盘工具Rufus将镜像文件写到u盘中,点击选择,找到解压好后缀为img的文件…