二叉排序树查找效率的改进----平衡二叉树的实现

本文探讨了二叉排序树的查找效率问题,指出树的形状影响查找效率,并引入了平衡二叉树(AVL树)的概念。平衡二叉树是一种左右子树深度差不超过1的二叉树,确保了查找效率的平衡。文章还提供了平衡二叉树的代码实现。
摘要由CSDN通过智能技术生成

        对二叉排序树查找效率进行分析,就要看其平均查找长度,由于相同n个结点的二叉排序树是不唯一的,例如:

                   

            上面两个二叉排序树的结点是相同的,但是树的形状不同,这样查找元素的时候,效率也不同,若看平均查找效率,必然是第一个图中的效率高。因此有了平衡二叉树。

            平衡二叉树(Balanced Binary Tree)又称为AVL树,它或者是一棵空树,或者是具有下列性质的二叉树:它的左子树和右子树都是平衡二叉树,且左子树和右子树的深度之差的绝对值不超过1。若将二叉树上结点的平衡因子BF(Balance Factor)定义为该结点的左子树的深度减去它的右子树的深度,则平衡二叉树上所有结点的平衡因子只可能是-1,0,+1。

           贴上平衡二叉树的代码实现。

/*****************************平衡二叉树建立,查找,插入,删除操作******************************/
//by vipper.zhang 2011.7.12 如果有什么问题或者可以改进的建议,请发邮件vipper.zhang@gmail.com 
//O(∩_∩)0

#include <iostream>
using namespace std;

typedef int KeyType;
const int LH=1;
const int EH=0;
const int RH=-1;

//二叉链表存储二叉查找树结点
typedef struct BSTNode{
	KeyType key;
	int   bf;
    BSTNode *lchild,*rchild;
}*BSTree;


///  函数声明  ///
void R_Rotate(BSTree &p);    //对以*p为根的二叉排序树作右旋处理
void L_Rotate(BSTree &p);    //对以*p为根的二叉排序树作左旋处理
void LeftBalance(BSTree &T); //对以指针T所指结点为根的二叉树作左平衡旋转处理
void RightBalance(BSTree &T);//对以指针T所指结点为根的二叉树作右平衡旋转处理
bool InsertAVL(BSTree &T,int e,bool &taller);//插入结点e
bool SearchBST(BSTree &T,int key);//查找元素key是否在树T中
void PrintBST(BSTree T,int m);//按树状打印输出二叉树的元素
void CreateBST(BSTree &T);    //创建平衡二叉树,(注意:以输入-1为二叉树建立的结束)
void LeftBalance_div(BSTree &p,int &shorter);//删除结点时左平衡旋转处理
void RightBalance_div(BSTree &p,int &shorter);//删除结点时右平衡旋转处理
void Delete(BSTree q,BSTree  &r,int &shorter);//删除结点
int DeleteAVL(BSTree &p,int x,int &shorter);//平衡二叉树的删除操作

/

 
int main()
{
	int m;                 //控制输出树时的层次
	int input;             //操作选项
	int search;            //要查找的元素||要插入 的元素||要删除的元素
	bool taller=false;          //是否插入成功
	int shorter=0;         //是否删除成功
	
	BSTree T=new BSTNode;
	T=NULL;
	while(1)
	{
		system("cls");
		cout<<"             ********************************************"<<endl;
		cout<<"    ╱◥██◣  *1.创建\t2.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值