数据结构之平衡二叉树

本文介绍了平衡二叉查找树(AVL树)的概念,它是由Adelse-Velskil和Landis在1962年提出的高度平衡的二叉树。平衡二叉树要求任意节点的左右子树高度差不超过1,以确保高效的查找效率。文章详细阐述了平衡调整的四种情况:LL型、RR型、LR型和RL型调整,并提供了相应的调整示例。
摘要由CSDN通过智能技术生成

平衡二叉树概念

平衡二叉查找树:简称平衡二叉树。由前苏联的数学家Adelse-Velskil和Landis在1962年提出的高度平衡的二叉树,根据科学家的英文名也称为AVL树。
什么叫“平衡”,直观上的最佳平衡条件就是 每个节点的左右子树有着相同高度,但这确实太过苛刻。平衡二叉树AVL tree退而求其次,要求任何节点的左右节点的左右子树高度差不超过1

平衡二叉树的调整

LL型调整

在这里插入图片描述
在这里插入图片描述
100为根节点传入,将90作为新的根节点,并使100为90的右子树,将90原来的右子树变为100的左子树

void LL_RRotate(PPNODE Node)
{
   
	if (Node == NULL)
	{
   
		return;
	}
	PNODE v1 = (*Node)->Left;
	if (v1==NULL)
	{
   
		return;
	}
	(*Node)->Left = v1->Right;
	v1->Right = (*Node);
	(*Node) = v1;
}

RR型调整

在这里插入图片描述
在这里插入图片描述

void RR_LRotate(PPNODE Node)
{
   
	if (Node == NULL)
	{
   
		return;
	}
	PNODE v1 = (*Node)->Right;
	if (v1 == NULL)
	{
   
		return;
	}
	(*Node)->Right = v1->Left;
	v1->Left = (*Node);
	(*Node) = v1;
}

LR型调整

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

void LR_Rotate(PPNODE Node)
{
   
	RR_LRotate(&(*Node)->Left);
	LL_RRotate(Node);
}

RL型调整

在这里插入图片描述
在这里插入图片描述

void RL_Rotate(PPNODE Node)
{
   
	LL_RRotate(&(*Node)->Right);
	RR_LRotate(Node);
}

代码示例

#include<Windows.h>
#include<tchar.h>
#include<iostream>
#include<math.h>
using namespace std;



/*
平衡二叉树的操作(节点高度 单旋 双旋 节点添加 节点删除 节点查找)
*/
#ifndef Max
#define Max(a,b)    ((a)>(b)?(a):(b))
#endif // !Max


typedef struct _NODE_
{
   
	int DataValue;
	_NODE_ *Left;
	_NODE_ *Right;
}NODE,*PNODE,**PPNODE;

PNODE SearchNode(PNODE Node, int DataValue);
BOOL InsertNode(PPNODE Node, int DataValue);
void LL_RRotate(PPNODE Node);
void RR_LRotate(PPNODE Node);
void LR_Rotate(PPNODE Node);
void 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值