二叉排序树和二叉平衡树
一、二叉排序树
1. 二叉排序树定义:中序排序为有顺序的树。
树上的性质则为:
a. 若其左子树非空,则左子树上所有结点的值均小于根节点的值;
b. 若其右子树非空,则右子树上所有结点的值均大于根节点的值;
c. 其左右子树又各是一颗二叉排序树。
2. 二叉排序树的操作:
a. 二叉排序树的插入,例如以下几个数进行插入形成二叉树{45,24,53,12,37,93 }如下,将45放入根节点,然后比根节点小的就放左边,比根节点大的就放右边。
b. 二叉排序树的删除,有三种删除情况,若右子树空左子树不空,则用左子女填补;若左子树空右子树不空,则用右子女填补;若左右子树都不空,则选择中序排序的后继结点来填补。如下图所示:
3. 二叉排序树的查找算法实现
算法思想:
a. 若二叉排序树为空,则查找失败,返回空指针。
b. 若二叉排序树非空,将给定值key与根节点的关键字T->data.key进行比较:
- 若key等于T->data.key,则查找成功,返回根节点地址;
- 若key小于T->data.key,则进一步查找左子树;
- 若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其他的也是如此
调整的结果为:
结合下面的例子做一个理解:
平衡二叉树的实现在进行创建的时候,跟二叉排序树的思路一样,再添加一个平衡因子的计算,在插入过程中进行调整。这里提供这一个思路,具体实现不进行表示。
二叉排序树和二叉平衡树相关推荐
- 408数据结构学习笔记——二叉排序树、二叉平衡树、红黑树
目录 1.二叉排序树 1.1.二叉排序树的基本概念 1.2.二叉排序树的查找代码实现 1.3.二叉排序树的插入 1.4.二叉排序树的删除 1.5.二叉排序树的查找效率 1.6.二叉排序树的缺陷 2.平 ...
- C++判断一棵树是否为AVL(二叉平衡树)
1. 题目要求 判断一棵二叉树是否是平衡二叉树 2. 思路 AVL树的名字来源于它的发明作者G.M. Adelson-Velsky 和 E.M. Landis.AVL树是最先发明的自平衡二叉查找树(S ...
- 数据结构源码笔记(C语言):二叉平衡树的相关操作算法
//二叉平衡树的相关运算 #include<stdio.h> #include<malloc.h> #include<string.h>typedef char I ...
- 数据结构与算法——二叉平衡树(AVL树)详解
文章目录 AVL树概念 不平衡概况 四种平衡旋转方式 RR平衡旋转(左单旋转) LL平衡旋转(右单旋转) RL平衡旋转(先右后左双旋转) LR平衡旋转(先左后右单旋转) java代码实现 总结 AVL ...
- AVL树(二叉平衡树)详解与实现
公众号文章链接 AVL树概念 前面学习二叉查找树和二叉树的各种遍历,但是其查找效率不稳定(斜树),而二叉平衡树的用途更多.查找相比稳定很多.(欢迎关注数据结构专栏) AVL树是带有平衡条件的二叉查找树 ...
- 【数据结构进阶】二叉平衡树
一. 二叉平衡树 概念 二叉搜索树有称 二叉排序树,它也可以是一个空树. 如果它的左子树不为空,则左子树上所有结点的值都小于根结点的值 如果他的右子树不为空,则右子树上所有结点的值都大于根结点的值 它 ...
- C语言实现二叉平衡树
[前置知识]二叉树和二叉排序树 目录 1.什么是AVL树 2.怎么平衡 前言 对于大量的数据而言,链表的线性访问时间太慢,不宜使用.本章节将会介绍一种简单的数据结构:树(tree),其大部分操作的运行 ...
- 入门二叉平衡树的世界
入门二叉平衡树的世界 1. 二叉平衡树的概念 二叉平衡树又称AVL树,它或者是一棵空二叉树,或者是具有下列性质的二叉树: 1) 根的左右子树高度之差的绝对值不超过1: 2) 根的左右子树都是二 ...
- C. DS二叉平衡树构建(教材版)
[id:157][20分]C. DS二叉平衡树构建 题目描述 在初始为空的平衡二叉树中依次插入n个结点,请输出最终的平衡二叉树. 要求实现平衡二叉树,不可以使用各类库函数. AVL代码参考模板: #i ...
- 二叉平衡树的插入和删除操作
[转载]二叉平衡树的插入和删除操作 1. 二叉平衡树 二叉排序树查找.插入和删除操作的时间复杂度和树的深度n有关.构建树时,当先后插入的结点按关键字有序时,二叉排序树退化为单枝树,平均查找长 ...
最新文章
- 嵌入式驱动开发 视频学习推荐
- 以不同的维度去看待问题
- 利用JasperReport+iReport进行Web报表开发
- Apollo通过客户端openApi方式更新、获取、发布配置
- cass读取dat文件_CASS里DTM法土方计算
- tensorflow分类的loss函数_Tensorflow Keras的loss函数总结
- php常见错误和解决办法
- 【HAVENT原创】superagentCallback*** is not defined
- jupyter notebook报错500 : Internal Server Error
- 天下手游一直显示连接服务器,《天下手游》4月11日合服公告
- ASTC纹理压缩格式介绍
- IntelliJ IDEA 之汉化包安装
- WAIC | 九章云极方磊:Hypernets——自动化机器学习的基础框架
- 第七章 突变和随机化
- python fun函数、求4x4整型数组的主对角线元素的和_C语言编程求一个4x4数组左下三角 包括主对角线元素的和...
- C++笔记: 函数_Hammond‘s blog
- 基于springboot写的毕业设计星嘉购物系统设计与实现(附资源下载)
- java web 网课_中国大学MOOCJava Web开发基础网课答案
- lstm 变长序列_基于变长时间间隔LSTM方法的胎儿异常体重预测
- matlab 期权 函数,Matlab分析期权定价