MOOC数据结构 04-树5 Root of AVL Tree (25分)

MOOC数据结构 04-树5 Root of AVL Tree (25分)

An AVL tree is a self-balancing binary search tree. In an AVL tree, the heights of the two child subtrees of any node differ by at most one; if at any time they differ by more than one, rebalancing is done to restore this property. Figures 1-4 illustrate the rotation rules.
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述Now given a sequence of insertions, you are supposed to tell the root of the resulting AVL tree.

Input Specification:

Each input file contains one test case. For each case, the first line contains a positive integer N (≤20) which is the total number of keys to be inserted. Then N distinct integer keys are given in the next line. All the numbers in a line are separated by a space.
Output Specification:

For each test case, print the root of the resulting AVL tree in one line.
Sample Input 1:

5
88 70 61 96 120

Sample Output 1:

70

Sample Input 2:

7
88 70 61 96 120 90 65

Sample Output 2:

88
对AVLTree的理解:
1、定义:左右子树的高度差不超过1
2、旋转结点的选取:在每次旋转时主要抓取三个结点,①平衡被破坏的结点;②平衡破坏结点的下一个结点(根据破坏者的位置确定);③破坏结点(即使破坏结点没有与第二个结点直接相连,可以将包含破坏结点的②结点的一整棵子树看作一个结点);
3、LL旋转:将被破坏结点的left指向②结点的right,同时将②结点的right指向①;RR同理;
LR旋转:先从②结点开始,进行一次RR旋转(RR是将结点进行一次逆时针旋转)后,形式上就会变为LL,所以对被破坏结点使用一次LL旋转即可完成LR旋转;RL同理;

#include <stdio.h>
#include <stdlib.h>

typedef struct AVLTree {
   
	int data;
	struct AVLTree *left;
	struct AVLTree *right;
	int height;
} *AVLTree;

AVLTree Insert (AVLTree T, int data);//将数值插入树中
int Max (int a, int b);//寻找两数之间最大值
int GetHeight (AVLTree T);//寻找当前结点的高度
AVLTree SingleLeftRotation (AVLTree T);//LL旋转
AVLTree SingleRightRotation (AVLTree T
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值