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

C++笔记14•二叉树之二叉搜索树•

二叉搜索树

1.二叉搜索树

概念:

二叉搜索树又称二叉排序树也叫二叉查找树,它可以是一棵空树。
二叉树具有以下性质:
若它的左子树不为空,则左子树上所有节点的值都小于根节点的值
若它的右子树不为空,则右子树上所有节点的值都大于根节点的值
它的左右子树也分别为二叉搜索树;

2.二叉搜索树功能

1. 二叉搜索树的查找
a 、从根开始比较,查找,比根大则往右边走查找,比根小则往左边走查找。
b 、最多查找高度次,走到到空,还没找到,这个值不存在。
2. 二叉搜索树的插入
插入的具体过程如下:
a. 树为空,则直接新增节点,赋值给 root 指针
b. 树不空,按二叉搜索树性质查找插入位置,插入新节点
3.二叉搜索树的删除
首先查找元素是否在二叉搜索树中,如果不存在,则返回 , 否则要删除的结点可能分下面四种情 况:
a. 要删除的结点无孩子结点
b. 要删除的结点只有左孩子结点
c. 要删除的结点只有右孩子结点
d. 要删除的结点有左、右孩子结点
看起来有待删除节点有 4 中情况,实际情况 a 可以与情况 b 或者 c 合并起来,因此真正的删除过程如下:
情况 b :删除该结点且使被删除节点的双亲结点指向被删除节点的左孩子结点 -- 直接删除
情况 c :删除该结点且使被删除节点的双亲结点指向被删除结点的右孩子结点 -- 直接删除
情况 d:在它的右子树中寻找中序下的第一个结点( 也就是删除节点的左子树中最大的值或者删除节点的右子树中最小的值 ),用它的值填补到被删除节点 中,再来处理该结点的删除问题 -- 替换法删除
删除9、16、3、10节点
其中:节点9和16可以直接删除。3、10节点需要用替换法删除
节点3:需要用2节点或7节点来替换
节点10:需要用9节点或12节点来替换

3.二叉搜索树的性能 

最优情况下,二叉搜索树为完全二叉树 ( 或者接近完全二叉树 ) ,其平均比较次数为: log2(N)
最差情况下,二叉搜索树退化为单支树 ( 或者类似单支 ) ,其平均比较次数为: O(N)
解决方法:用三叉链的AVL树

http://www.mrgr.cn/news/17409.html

相关文章:

  • zdppy+vue3+onlyoffice文档管理系统实战 20240901 上课笔记 基于验证码登录功能基本完成
  • 算法——支持向量机(support vector machines,SVM)
  • Linux 进程与线程相关函数及进程间通信方法
  • mysql查询慢除了索引问题还会是因为什么?
  • 【机器人学导论】6自由度机械臂逆运动学求解—牛顿法(数值法,仅旋转关节)
  • android仿assistivetouch悬浮窗实现(带功能实现)
  • django models字段类型和参数的选择
  • ARKTS数组和Map的常规操作
  • C++初学(19)
  • priority_queue的使用方法
  • 【Python报错已解决】“ValueError: If using all scalar values, you must pass an index“
  • 离线二维数点
  • 【C++ Primer Plus习题】8.3
  • 前端打包部署,Nginx服务器启动
  • Redis:Redis性能影响因素
  • systemverilog中的DPI-C用例介绍
  • 【Python报错已解决】“ModuleNotFoundError: No module named ‘packaging‘“
  • 面向对象编程
  • 对零基础想转行网络安全同学的一点建议
  • 海外云服务器安装 JDK8 (Ubuntu 18.04 记录篇)