二叉排序树/平衡二叉树/哈夫曼树

本文深入介绍了二叉排序树、平衡二叉树(AVL树)和哈夫曼树的基本概念、性质、操作以及它们在查找效率上的差异。通过示例展示了不同操作如查找、插入和删除的过程,并探讨了如何通过平衡因子保持AVL树的平衡,以及哈夫曼树的构造和其在最小带权路径长度优化中的应用。
摘要由CSDN通过智能技术生成

本人将树相关知识总结为初、中、高三篇,本文属于树结构的中篇,主要阐述几种经典的树形结构,是继承树的基础知识之后,进行相关拓展那么本文将以三种典型的树形结构进行总结,从查找的角度来进行分析各个树型结构的区别与优势。

基础篇在:数据结构——树基础  (主要总结树、二叉树、线索二叉树、森林等基础相关知识)

二叉排序树

树表相关概念

查找表:查找表是由同一类型的数据元素(或记录)构成的集合。由于“集合”中的数据元素之间存在着松散的关系,因此查找表是一种应用灵便的结构。
关键字:用来标识一个数据元素(或记录)的某个数据项的值
主关键字:可堆一地标识一个记录的关键字是主关键字
次关键字:用以识别若干记录的关键字是次关键字。
查找表的分类:静态查找表仅用作于查询(检索)操作的查找表。如线性表等:动态查找表可以用作于插入删除等操作的表如树表等,常用于数据库等地方。
平均查找长度:ASL(Average Search Length)关键字的平均比较次数。

二叉排序树定义

(二叉搜索树、二叉查找树、BST)

若任意节点的左子树不空,则左子树上所有节点的值均小于它的根节点的值; 
若任意节点的右子树不空,则右子树上所有节点的值均大于它的根节点的值; 
任意节点的左、右子树也分别为二叉查找树; 

二叉排序树的性质:
中序遍历非空的二叉排序树所得到的数据元素序列是一个按关键字排列的递增有序序列。 

查找操作

二叉树排序树的存储结构

typedef struct {
	keyType key;    //关键字项,需要与给定的关键字进行对比
	infoType otherinfo: //其他数据项
}ElemType;
typedef struct BSTNode {
	ElemType data;          //数据域(可以包含关键字和其他数据)
	struct BSTNode* Lchild, * Rchild;  //左右孩子指针
}BSTNode,*BSTree;

 查找递归代码

这里注意 T->data.key 为原有的树根结点,而 key 为需要查询的关键字

//递归查找算法
BSTree SearchBST(BSTree T,int key) {  //ksy为新的关键字
	if (!T || T->data.key == key)return T; //递归结束条件T为空或给定关键字与原有关键字相等
	else if (T->data.key < key) return SearchBST(T->Rchild,key); //右子树查找
	else return SearchBST(T->Lchild, key);	//	左子树查找
}

这里的 判断条件 !T || T->data.key == key  中T若为空return返回的是空指针,也可以将这句改成两行代码 即 T为空则返回false,相等则返回T。

查找非递归代码

BSTree SearchBST(BSTree T, int key){
	whi
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序lee

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值