一、二叉排序树

1. 二叉排序树定义:中序排序为有顺序的树。

树上的性质则为:

a. 若其左子树非空,则左子树上所有结点的值均小于根节点的值;

b. 若其右子树非空,则右子树上所有结点的值均大于根节点的值;

c. 其左右子树又各是一颗二叉排序树。

2. 二叉排序树的操作:

a. 二叉排序树的插入,例如以下几个数进行插入形成二叉树{45,24,53,12,37,93 }如下,将45放入根节点,然后比根节点小的就放左边,比根节点大的就放右边。

b. 二叉排序树的删除,有三种删除情况,若右子树空左子树不空,则用左子女填补;若左子树空右子树不空,则用右子女填补;若左右子树都不空,则选择中序排序的后继结点来填补。如下图所示:

3. 二叉排序树的查找算法实现

算法思想:

a. 若二叉排序树为空,则查找失败,返回空指针。

b. 若二叉排序树非空,将给定值key与根节点的关键字T->data.key进行比较:

  1. 若key等于T->data.key,则查找成功,返回根节点地址;
  2. 若key小于T->data.key,则进一步查找左子树;
  3. 若key大于T->data.key,则进一步查找右子树。

代码实现:

typedef struct{KeyType key;         //关键字项InfoType otherinfo;  //其他数据域
}ElemType;typedef struct BSTNode{ElemType data;                   //数据域struct BSTNode *lchild,*rchild;  //左右孩子指针
}BSTNode,*BSTree;BSTree SearchBST(BSTree T,KeyType key){if((!T) || key == T->data.key) return T;else if(key<T->data.key>return SearchBST(T->lchild,key);else return SearchBST(T->rchild,key);
}

二、平衡二叉树

1. 平衡二叉树定义:一颗左右子树的高度之差的绝对值小于等于1的二叉排序树,其左右子树也是平衡二叉树。结合下图进行理解平衡二叉树的定义:

2. 平衡二叉树的调整:可以分为以下四种类型,进行调整。调整的原则为降低高度和保持二叉排序树的性质。

上图的树均为二叉排序树,例:LL型上 A>B>C  LR型上 A>B B<C其他的也是如此

调整的结果为:

结合下面的例子做一个理解:

平衡二叉树的实现在进行创建的时候,跟二叉排序树的思路一样,再添加一个平衡因子的计算,在插入过程中进行调整。这里提供这一个思路,具体实现不进行表示。

二叉排序树和二叉平衡树相关推荐

  1. 408数据结构学习笔记——二叉排序树、二叉平衡树、红黑树

    目录 1.二叉排序树 1.1.二叉排序树的基本概念 1.2.二叉排序树的查找代码实现 1.3.二叉排序树的插入 1.4.二叉排序树的删除 1.5.二叉排序树的查找效率 1.6.二叉排序树的缺陷 2.平 ...

  2. C++判断一棵树是否为AVL(二叉平衡树)

    1. 题目要求 判断一棵二叉树是否是平衡二叉树 2. 思路 AVL树的名字来源于它的发明作者G.M. Adelson-Velsky 和 E.M. Landis.AVL树是最先发明的自平衡二叉查找树(S ...

  3. 数据结构源码笔记(C语言):二叉平衡树的相关操作算法

    //二叉平衡树的相关运算 #include<stdio.h> #include<malloc.h> #include<string.h>typedef char I ...

  4. 数据结构与算法——二叉平衡树(AVL树)详解

    文章目录 AVL树概念 不平衡概况 四种平衡旋转方式 RR平衡旋转(左单旋转) LL平衡旋转(右单旋转) RL平衡旋转(先右后左双旋转) LR平衡旋转(先左后右单旋转) java代码实现 总结 AVL ...

  5. AVL树(二叉平衡树)详解与实现

    公众号文章链接 AVL树概念 前面学习二叉查找树和二叉树的各种遍历,但是其查找效率不稳定(斜树),而二叉平衡树的用途更多.查找相比稳定很多.(欢迎关注数据结构专栏) AVL树是带有平衡条件的二叉查找树 ...

  6. 【数据结构进阶】二叉平衡树

    一. 二叉平衡树 概念 二叉搜索树有称 二叉排序树,它也可以是一个空树. 如果它的左子树不为空,则左子树上所有结点的值都小于根结点的值 如果他的右子树不为空,则右子树上所有结点的值都大于根结点的值 它 ...

  7. C语言实现二叉平衡树

    [前置知识]二叉树和二叉排序树 目录 1.什么是AVL树 2.怎么平衡 前言 对于大量的数据而言,链表的线性访问时间太慢,不宜使用.本章节将会介绍一种简单的数据结构:树(tree),其大部分操作的运行 ...

  8. 入门二叉平衡树的世界

    入门二叉平衡树的世界 1. 二叉平衡树的概念     二叉平衡树又称AVL树,它或者是一棵空二叉树,或者是具有下列性质的二叉树: 1) 根的左右子树高度之差的绝对值不超过1: 2) 根的左右子树都是二 ...

  9. C. DS二叉平衡树构建(教材版)

    [id:157][20分]C. DS二叉平衡树构建 题目描述 在初始为空的平衡二叉树中依次插入n个结点,请输出最终的平衡二叉树. 要求实现平衡二叉树,不可以使用各类库函数. AVL代码参考模板: #i ...

  10. 二叉平衡树的插入和删除操作

    [转载]二叉平衡树的插入和删除操作 1.      二叉平衡树 二叉排序树查找.插入和删除操作的时间复杂度和树的深度n有关.构建树时,当先后插入的结点按关键字有序时,二叉排序树退化为单枝树,平均查找长 ...

最新文章

  1. 嵌入式驱动开发 视频学习推荐
  2. 以不同的维度去看待问题
  3. 利用JasperReport+iReport进行Web报表开发
  4. Apollo通过客户端openApi方式更新、获取、发布配置
  5. cass读取dat文件_CASS里DTM法土方计算
  6. tensorflow分类的loss函数_Tensorflow Keras的loss函数总结
  7. php常见错误和解决办法
  8. 【HAVENT原创】superagentCallback*** is not defined
  9. jupyter notebook报错500 : Internal Server Error
  10. 天下手游一直显示连接服务器,《天下手游》4月11日合服公告
  11. ASTC纹理压缩格式介绍
  12. IntelliJ IDEA 之汉化包安装
  13. WAIC | 九章云极方磊:Hypernets——自动化机器学习的基础框架
  14. 第七章 突变和随机化
  15. python fun函数、求4x4整型数组的主对角线元素的和_C语言编程求一个4x4数组左下三角 包括主对角线元素的和...
  16. C++笔记: 函数_Hammond‘s blog
  17. 基于springboot写的毕业设计星嘉购物系统设计与实现(附资源下载)
  18. java web 网课_中国大学MOOCJava Web开发基础网课答案
  19. lstm 变长序列_基于变长时间间隔LSTM方法的胎儿异常体重预测
  20. matlab 期权 函数,Matlab分析期权定价

热门文章

  1. 十大顶级大数据可视化工具
  2. android切图规范,APP切图详细规范终极指南
  3. 繁简体(GB-Big5)字符串互转的JAVA方式实现
  4. JavaScript编辑器推荐
  5. 工业数据采集网关的特点及应用场景
  6. SpringMVC工作原理图
  7. android 蓝牙耳机插拔,一种插拔式蓝牙耳机的制作方法
  8. Android 5.0特性
  9. EasyAR+ZXing实现UnityAR二维码扫描
  10. 好用的安卓手机投屏电脑软件