题目大意
给一个数字序列,要求按序列中数字出现的顺序将其构造为一颗AVL树,并将AVL树的根节点的值输出
输入
每组包含一个测试用例
- 第一行是一个正整数 N ≤ 20 N\le20 N≤20表示数字序列的长度
- 第二行是 N N N个不同的整数
输出
对每个样例在一行中输出AVL树的根节点的值
样例输入
5
88 70 61 96 120
7
88 70 61 96 120 90 65
样例输出
70
88
解析
用python实现一下AVL树的插入操作就行
关于AVL树,可以参考我写的一篇博客:AVL树
# -*- coding: utf-8 -*-
# @Time : 2019/6/26 14:45
# @Author : ValarMorghulis
# @File : 1066.py
class node:
def __init__(self, val):
self.val = val
self.left = None
self.right = None
def getHeight(root):
if root is None:
return 0
return max(getHeight(root.left), getHeight(root.right)) + 1
def leftRotate(root):
t = root.right
root.right = t.left
t.left = root
return t
def rightRotate(root):
t = root.left
root.left = t.right
t.right = root
return t
def leftRightRotate(root):
root.left = leftRotate(root.left)
return rightRotate(root)
def rightLeftRotate(root):
root.right = rightRotate(root.right)
return leftRotate(root)
def insert(root, val):
if root is None:
root = node(val)
elif val < root.val:
root.left = insert(root.left, val)
if getHeight(root.left) - getHeight(root.right) == 2:
root = rightRotate(root) if val < root.left.val else leftRightRotate(root)
else:
root.right = insert(root.right, val)
if getHeight(root.right) - getHeight(root.left) == 2:
root = leftRotate(root) if val > root.right.val else rightLeftRotate(root)
return root
def solve():
n = int(input())
a = list(map(int, input().split()))
root = None
for i in range(n):
root = insert(root, a[i])
print(root.val)
if __name__ == "__main__":
solve()