練習4.2 平衡二叉樹的根 (25 分) 浙大版《數據結構(第2版)》題目集


將給定的一系列數字插入初始為空的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;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM