1066. Root of AVL Tree (25)【AVL树】——PAT (Advanced Level) Practise

题目信息

1066. Root of AVL Tree (25)

时间限制100 ms

内存限制65536 kB

代码长度限制16000 B

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树,没啥技巧

AC代码

#include <cstdio>
#include <algorithm>
using namespace std;
struct node{
    node *left, *right;
    int v, w;
    node(int value, node* l, node* r) : v(value), left(l), right(r), w(0) {}
};
node *nil = new node(0, NULL, NULL);
node *head = nil;
void leftrotate(node *&head){
    node *t = head->right;
    head->right = t->left;
    t->left = head;
    head = t;
    head->left->w = max(head->left->right->w, head->left->left->w) + 1;
    head->w = max(head->right->w, head->left->w) + 1;
}
void rightrotate(node *&head){
    node *t = head->left;
    head->left = t->right;
    t->right = head;
    head = t;
    head->right->w = max(head->right->right->w, head->right->left->w) + 1;
    head->w = max(head->right->w, head->left->w) + 1;
}
void insert(node *&head, int v){
    if (head == nil){
        head = new node(v, nil, nil);
    }else if (v > head->v){
        insert(head->right, v);
        if (2 == head->right->w - head->left->w){
            if (v > head->right->v){
                leftrotate(head);
            }else{
                rightrotate(head->right);
                leftrotate(head);
            }
        }
    }else{
        insert(head->left, v);
        if (2 == head->left->w - head->right->w){
            if (v <= head->left->v){
                rightrotate(head);
            }else{
                leftrotate(head->left);
                rightrotate(head);
            }
        }
    }
    head->w = max(head->left->w, head->right->w) + 1;
}
int main()
{
    int n, a;
    scanf("%d", &n);
    while (n--){
        scanf("%d", &a);
        insert(head, a);
    }
    printf("%d\n", head->v);
    return 0;
}

个人游戏推广:

《10云方》与方块来次消除大战!

时间: 2024-08-02 02:41:55

1066. Root of AVL Tree (25)【AVL树】——PAT (Advanced Level) Practise的相关文章

1093. Count PAT&#39;s (25)【计数】——PAT (Advanced Level) Practise

题目信息 1093. Count PAT's (25) 时间限制120 ms 内存限制65536 kB 代码长度限制16000 B The string APPAPT contains two PAT's as substrings. The first one is formed by the 2nd, the 4th, and the 6th characters, and the second one is formed by the 3rd, the 4th, and the 6th c

1043. Is It a Binary Search Tree (25)【二叉树】——PAT (Advanced Level) Practise

题目信息 1043. Is It a Binary Search Tree (25) 时间限制400 ms 内存限制65536 kB 代码长度限制16000 B A Binary Search Tree (BST) is recursively defined as a binary tree which has the following properties: The left subtree of a node contains only nodes with keys less than

1102. Invert a Binary Tree (25)【二叉树】——PAT (Advanced Level) Practise

题目信息 1102. Invert a Binary Tree (25) 时间限制400 ms 内存限制65536 kB 代码长度限制16000 B The following is from Max Howell @twitter: Google: 90% of our engineers use the software you wrote (Homebrew), but you can't invert a binary tree on a whiteboard so fuck off.

1086. Tree Traversals Again (25)【二叉树】——PAT (Advanced Level) Practise

题目信息 1086. Tree Traversals Again (25) 时间限制200 ms 内存限制65536 kB 代码长度限制16000 B An inorder binary tree traversal can be implemented in a non-recursive way with a stack. For example, suppose that when a 6-node binary tree (with the keys numbered from 1 to

1090. Highest Price in Supply Chain (25)【树】——PAT (Advanced Level) Practise

题目信息 1090. Highest Price in Supply Chain (25) 时间限制200 ms 内存限制65536 kB 代码长度限制16000 B A supply chain is a network of retailers(零售商), distributors(经销商), and suppliers(供应商)– everyone involved in moving a product from supplier to customer. Starting from o

1106. Lowest Price in Supply Chain (25)【树+深搜】——PAT (Advanced Level) Practise

题目信息 1106. Lowest Price in Supply Chain (25) 时间限制200 ms 内存限制65536 kB 代码长度限制16000 B A supply chain is a network of retailers(零售商), distributors(经销商), and suppliers(供应商)– everyone involved in moving a product from supplier to customer. Starting from on

1094. The Largest Generation (25)【二叉树】——PAT (Advanced Level) Practise

题目信息 1094. The Largest Generation (25) 时间限制200 ms 内存限制65536 kB 代码长度限制16000 B A family hierarchy is usually presented by a pedigree tree where all the nodes on the same level belong to the same generation. Your task is to find the generation with the

1099. Build A Binary Search Tree (30)【二叉树】——PAT (Advanced Level) Practise

题目信息 1099. Build A Binary Search Tree (30) 时间限制100 ms 内存限制65536 kB 代码长度限制16000 B A Binary Search Tree (BST) is recursively defined as a binary tree which has the following properties: The left subtree of a node contains only nodes with keys less than

1067. Sort with Swap(0,*) (25)【贪心】——PAT (Advanced Level) Practise

题目信息 1067. Sort with Swap(0,*) (25) 时间限制150 ms 内存限制65536 kB 代码长度限制16000 B Given any permutation of the numbers {0, 1, 2,-, N-1}, it is easy to sort them in increasing order. But what if Swap(0, *) is the ONLY operation that is allowed to use? For exa