AVL树的实现(代码实现)

AVL又叫平衡二叉树,它是二叉搜索树的升级版,为什么有 平衡二叉树呢?是因为有些二叉搜索树要兼顾查询和插入的功能,那么很有可能在插入的情况下,有一种极端情况就是插入的值老是小于根节点,这样子的话,数据都被插入在了二叉搜索树的左侧,出现左侧一溜下去的情况,这样的二叉搜索树跟个链表差不多,查询效率是很低的,为了在插入的同时调整书高,引入了AVL树。
在AVL树中 最难的应该就是通过树的旋转来调整平衡的问题 它分为四种 下面是他们的代码实现:
(1):LL旋转:

Tnode* LLInsert(Tnode * A){
	Tnode * B = A -> left;
	A -> left = B -> right;
	B -> right = A;
	A ->Height =max(GetHeight(A->left),GetHeight(A->right)) +1;
	B ->Height =max(GetHeight(B->left),A->Height) +1;
	return B ;

(2):RR旋转

Tnode* RRInsert(Tnode *A){
    Tnode *B = A -> right;
    A -> right = B -> left;
    B -> left = A ;
    A ->Height = max(GetHeight(A->left),GetHeight(A->right))+1;
    B ->Height = max(GetHeight(B->left),GetHeight(B->right))+1;
    return B;
}

(3):LR旋转:

Tnode* LRInsert(Tnode *A){
    A->left = RRInsert(A->left);
    return LLInsert(A);
}

(4);RL旋转:

Tnode* RLInsert(Tnode *A){
    A -> right = LLInsert(A->right);
    return RRInsert(A);
}

其中LL旋转和RR旋转是最基础的两种旋转,而另外RL和RL旋转都是基于这两种旋转的。
下边是AVL树的插入(重点),其实也不是很难,就是在二叉搜索树的基础上增加了两个操作,插入完成后的旋转调整 和树高调整

Tnode * Insert(Tnode *T,int x){
	if(!T){
		T = (Tnode *)malloc(sizeof(Tnode));
		T -> data = x;
		T -> left = T -> right = NULL;

	}
	else if(x < T->data){
		T -> left = Insert(T -> left, x);
		if(GetHeight(T -> left) - GetHeight(T -> right) == 2){
			if(x < T -> left ->data) T = LLInsert(T);
			else T = LRInsert(T);

		}
	}
	else if(x > T->data){
		T -> right = Insert(T -> right, x);
		if(GetHeight(T -> right) - GetHeight(T -> left) == 2)
			if(x > T -> right -> data) T = RRInsert(T);
			else T = RLInsert(T);
	}
	T -> Height = max(GetHeight(T -> left),GetHeight(T -> right)) + 1;

	return T;
}

总结:AVL树是一种升级版的搜索树,如果我们判断出某些实际情况需要用到树的时候 并且对树的操作有插入和查询的时候,我们就要考虑使用AVL树了,如果仅仅是查找的话二叉搜索树足矣

全部评论

相关推荐

点赞 收藏 评论
分享
正在热议
# 牛客帮帮团来啦!有问必答 #
1152487次浏览 17153人参与
# 通信和硬件还有转码的必要吗 #
11234次浏览 101人参与
# 不去互联网可以去金融科技 #
20587次浏览 258人参与
# 和牛牛一起刷题打卡 #
19066次浏览 1635人参与
# 实习与准备秋招该如何平衡 #
203457次浏览 3628人参与
# 大厂无回复,继续等待还是奔赴小厂 #
4987次浏览 31人参与
# OPPO开奖 #
19272次浏览 268人参与
# 通信硬件薪资爆料 #
265991次浏览 2484人参与
# 国企是理工四大天坑的最好选择吗 #
2233次浏览 34人参与
# 互联网公司评价 #
97728次浏览 1280人参与
# 简历无回复,你会继续海投还是优化再投? #
25040次浏览 354人参与
# 0offer是寒冬太冷还是我太菜 #
454946次浏览 5125人参与
# 国企和大厂硬件兄弟怎么选? #
53925次浏览 1013人参与
# 参加过提前批的机械人,你们还参加秋招么 #
14647次浏览 349人参与
# 硬件人的简历怎么写 #
82292次浏览 852人参与
# 面试被问第一学历差时该怎么回答 #
19410次浏览 213人参与
# 你见过最离谱的招聘要求是什么? #
28335次浏览 248人参与
# 学历对求职的影响 #
161266次浏览 1804人参与
# 你收到了团子的OC了吗 #
538813次浏览 6389人参与
# 你已经投递多少份简历了 #
344299次浏览 4963人参与
# 实习生应该准时下班吗 #
97007次浏览 722人参与
# 听劝,我这个简历该怎么改? #
63527次浏览 622人参与
牛客网
牛客企业服务