将给定的一系列数字插入初始为空的AVL树,请你输出最后生成的AVL树的根结点的值。
输入格式:
输入的第一行给出一个正整数N(≤),随后一行给出N个不同的整数,其间以空格分隔。
输出格式:
在一行中输出顺序插入上述整数到一棵初始为空的AVL树后,该树的根结点的值。
输入样例1:
5 88 70 61 96 120
输出样例1:
70
输入样例2:
7 88 70 61 96 120 90 65
输出样例2:
88主要考查avl树的调整过程。代码:
#include <stdio.h> #include <stdlib.h> typedef struct Node Node; struct Node { int Data; struct Node *Left,*Right; }*head = NULL; Node *New(int d) { Node *node = (Node *)malloc(sizeof(Node)); node -> Data = d; node -> Left = node -> Right = NULL; return node; } Node *ll(Node *node) { Node *l = node -> Left; node -> Left = l -> Right; l -> Right = node; return l; } Node *rr(Node *node) { Node *r = node -> Right; node -> Right = r -> Left; r -> Left = node; return r; } Node *lr(Node *node) { node -> Left = rr(node -> Left); return ll(node); } Node *rl(Node *node) { node -> Right = ll(node -> Right); return rr(node); } int max(int a,int b) { return a > b ? a : b; } int Height(Node *node) { return node == NULL ? 0 : max(Height(node -> Left),Height(node -> Right)) + 1; } Node* Insert(Node *node,int d) { if(node == NULL) { node = New(d); } else if(d < node -> Data) { node -> Left = Insert(node -> Left,d); } else { node -> Right = Insert(node -> Right,d); } if(Height(node -> Left) - Height(node -> Right) == 2) { if(d < node -> Left -> Data) { node = ll(node); } else { node = lr(node); } } else if(Height(node -> Left) - Height(node -> Right) == -2) { if(d > node -> Right -> Data) { node = rr(node); } else { node = rl(node); } } return node; } int main() { int n,d; scanf("%d",&n); for(int i = 0;i < n;i ++) { scanf("%d",&d); head = Insert(head,d); } printf("%d",head -> Data); return 0; }