| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> 【C++】二叉搜索树 -> 正文阅读 |
|
[C++知识库]【C++】二叉搜索树 |
1、二叉搜索树的概念?二叉搜索树又称二叉排序树,它可以是一颗空树,亦可以是一颗具有如下性质的二叉树: ??①若根节点的左子树不为空,则左子树上的所有节点的值域都小于根节点的值 例如下面的这棵二叉树就是一棵二叉搜索树: 2、二叉搜索树的操作声明:该文章讨论的是二叉搜索树中节点值唯一的情况。 二叉搜索树的查找对于查找部分,充分利用二叉搜索树的特性,即右子树的value 大于根节点,左子树的value小于根节点。 例如:查找下图中的红色方框中的节点 总结基本步骤: 若根节点不为空: 否则(根节点为空了),直接返回false,表示树中不存在要查找的key 二叉搜索树的插入主要分两大类的情况进行讨论:
如下图所示:
e.g:在下面的二叉搜索树中插入-1
以上就是二叉搜索树插入的两大类情况及其处理方式 二叉搜索树的删除删除也是分为两大步骤:
具体代码片段如下:
上述代码执行完毕后,delNode有两种情况,
Ⅰ、 Ⅱ、 删除时,对于待删除结点要根据其孩子节点分情况讨论:
下面就这两种情况展开讨论: 删除过程见下图:
我们结合删除节点是叶子节点 && 删除节点仅有左子树两种情况来看,发现这两种情况可以进行合并。合并后的代码如下图:
这里不再进行分析,直接给出代码:
具体过程见下图: 3、二叉搜索树的实现数据结构:
采用模板的方式实现,具体代码见 BinarySearchTree 4、二叉搜索树的性能分析插入和删除操作都必须先查找,查找效率代表了二叉搜索树中各个操作的性能 对于有n个结点的二叉搜索树,若每个元素查找的概率相等,则二叉搜索树平均查找长度是结点在二叉搜索树的深度的函数。即结点越深,比较次数越多。 但对于同一个关键码的集合,如果各关键码插入的次序不同,可能会得到不同的二叉搜索树: 因此,二叉搜索树的时间复杂度为O(log2N) 此篇结束!下篇再见~ |
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 18:30:15- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |