数据结构系列内容的学习目录 → \rightarrow →浙大版数据结构学习系列内容汇总。
题目描述: AVL树是一种自平衡二叉搜索树。在AVL树中,任意节点的两个子树的高度最多相差1。如果在任何时候它们的差超过1,则会进行重新平衡以恢复此属性。旋转规则如下图所示。
现给定一个插入序列,需要得到的AVL树的根。
输入格式: 每个输入文件包含一个测试用例。
对于每种情况,第一行包含一个正整数N( ⩽ \leqslant ⩽ 20),为要插入的元素的总数。
然后在下一行给出N个不同的整数元素。
一行中的所有数字都用空格隔开。
输出格式: 对于每个测试用例,将生成的AVL树的根打印在一行中。
输入样例1(对应图2):
5
88 70 61 96 120
输出样例1:
70
输入样例2(对应图4):
7
88 70 61 96 120 90 65
输出样例2:
88
代码实现:
#include<iostream>
using namespace std;
typedef struct AVLNode *AVLTree;
struct AVLNode {
int data; // 存值
AVLTree left; // 左子树
AVLTree right; // 右子树
int height; // 树高
};
// 返回最大值
int Max(int a, int b)
{
return a > b ? a : b;
}
// 返回树高,空树返回-1
int getHeight(AVLTree A)
{
return A == NULL ? -1 : A