zoukankan      html  css  js  c++  java
  • 练习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;
    }
  • 相关阅读:
    【12】python模块:itsdangerous(生成临时身份令牌)
    python作业/练习/实战:下载QQ群所有人的头像
    【4】Python操作redis
    【7】Python网络请求:requests模块
    【6】Python网络请求:urllib模块
    python学习笔记:目录结构
    【9】Python接口开发:flask Demo实例
    【8】Python接口开发:PythonWEB框架之Flask
    前端学习笔记——引入css文件、样式优先级
    Yii2模型介绍
  • 原文地址:https://www.cnblogs.com/8023spz/p/11875946.html
Copyright © 2011-2022 走看看