题干
将给定的一系列数字插入初始为空的AVL树,请你输出最后生成的AVL树的根结点的值。
输入格式: 输入的第一行给出一个正整数N(≤20),随后一行给出N个不同的整数,其间以空格分隔。
输出格式: 在一行中输出顺序插入上述整数到一棵初始为空的AVL树后,该树的根结点的值。
输入样例1: 5 88 70 61 96 120
输出样例1: 70
输入样例2: 7 88 70 61 96 120 90 65
输出样例2: 88
首先什么是平衡二叉树呢?
平衡二叉树又被叫做AVL树,它具有这样的性质
任何一个结点左右两个子树的高度差的绝对值不超过1
为什么需要构造这样的树呢?
它可以很好地解决二叉查找树退化成链表的问题
比如说当你按自然递增递减的顺序往二叉查找树中输入结点数值时
这棵二叉查找树就是一个链表,显然有问题
所以通过各种不同的情况,对二叉查找树进行旋转
把插入、查找、删除的时间复杂度最好最坏情况都维持在O(logN)
这是我理解的平衡二叉树的意义
代码如下
#include <stdio.h>
#include <malloc.h>
typedef struct BiTNode {
int Data;
struct BiTNode *Left;
struct BiTNode *Right;
}*AVLTree;
AVLTree SingleLeftRotation(AVLTree T) {
//左单旋
AVLTree B=T->Left;
T->Left=B->Right;
B->Right=T;
return B;
}
AVLTree SingleRightRotation(AVLTree T) {
//右单旋
AVLTree B=T->Right;
T->Right=B->Left;
B->Left=T;
return B