1066. Root of AVL Tree (25)-PAT甲级真题(AVL树)

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 ythe 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

题目大意:AVL树是自平衡二叉搜索树。 在AVL树中,任何节点的两个子子树的高度最多相差一个;如果在任何时候它们相差多于一个,则重新平衡以恢复此属性。 图1-4说明了旋转规则~现在给出一系列插入,要求输出根节点的值~

分析:写出建AVL(平衡二叉搜索树)的代码模版即可,rotateLeft表示左旋,rotateRight表示右旋,rotateLeftRight表示先左旋后右旋,rotateRightLeft表示先右旋后左旋,getHeight表示获取传入结点的子树的高度,insert表示插入建树的过程,如果root为空,直接新建结点插入即可~如果当前要插入的值小于root->val,则插入root的左子树;如果当前要插入的值大于root->val,则插入root的右子树~如果插入后左右子树高度差大于1,再根据值的大小比较进行旋转调整使树平衡~插入完成后返回root指针赋值给main函数里的root~最后输出root的val值~

 

❤ 点击这里 -> 订阅《PAT | 蓝桥 | LeetCode学习路径 & 刷题经验》by 柳婼

❤ 点击这里 -> 订阅《从放弃C语言到使用C++刷算法的简明教程》by 柳婼

❤ 点击这里 -> 订阅PAT甲级乙级、蓝桥杯、GPLT天梯赛、LeetCode题解离线版