PAT1 1066 Root of AVL Tree

题目链接
我的github

题目大意

给一个数字序列,要求按序列中数字出现的顺序将其构造为一颗AVL树,并将AVL树的根节点的值输出

输入

每组包含一个测试用例

  • 第一行是一个正整数 N ≤ 20 N\le20 N20表示数字序列的长度
  • 第二行是 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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值