• 平衡二叉树的学习


    数据结构实验之查找二:平衡二叉树
    Time Limit: 400 ms Memory Limit: 65536 KiB
    Submit Statistic Discuss
    Problem Description
    根据给定的输入序列建立一棵平衡二叉树,求出建立的平衡二叉树的树根。

    Input
    输入一组测试数据。数据的第1行给出一个正整数N(n <= 20),N表示输入序列的元素个数;第2行给出N个正整数,按数据给定顺序建立平衡二叉树。

    Output
    输出平衡二叉树的树根。

    Sample Input
    5
    88 70 61 96 120
    Sample Output
    70

    此题链接→

    #include<stdio.h>
    #include<stdlib.h>
    struct node
    {
        int data;
        int height;//高度
        struct node *left, *right;
    };//节点
    int N;//元素的个数
    typedef struct node* Node;
    int deep(Node T)
    {
        if(T == NULL)return 0;
        else return T->height;
    }
    
    Node LL(Node T)
    {
        Node temp;
        temp = T->left;
        T->left = temp->right;
        temp->right = T;
         T->height = deep(T->left)>deep(T->right)?deep(T->left)+1:deep(T->right)+1;
        temp->height = deep(temp->left)>deep(temp->right)?deep(temp->left)+1:deep(temp->right)+1;
    
        return temp;
    
    }
    Node RR(Node T)
    {
        Node temp;
        temp = T->right;
        T->right = temp->left;
        temp->left = T;
         T->height = deep(T->left)>deep(T->right)?deep(T->left)+1:deep(T->right)+1;
        temp->height = deep(temp->left)>deep(temp->right)?deep(temp->left)+1:deep(temp->right)+1;
    
    
        return temp;
    }
    Node LR(Node T)
    {
        T ->left = RR(T->left);
        T = LL(T);
    
        return T;
    }
    Node RL(Node T)
    {
        T->right = LL(T->right);
        T = RR(T);
        return T;
    }
    
    Node Insert(Node T, int num)
    {
        if(T == NULL)//如果为空
        {
            T = (Node)malloc(sizeof(struct node));
            T ->data = num;
            T->left = NULL;
            T->right = NULL;
            T->height = 1;
    
        }
    
    
        if(T->data == num)return T;//如果 不能储存相等的 ,
        else if(num < T->data)//如果比他小
        {
    
            T->left = Insert(T->left, num);
            if(deep(T->left)-deep(T->right)>1)
            {
                if(num<T->left->data)
                {
                    T = LL(T);
                }
                else
                {
                    T = LR(T);
                }
            }
    
        }
        else if(num > T->data)//如果比他大
        {
    
              T->right =  Insert(T->right, num);
              if(deep(T->right)- deep(T->left)>1)
              {
                  if(num > T->right->data)
                  {
                      T =RR(T);
                  }
                  else
                  {
                      T =RL(T);
                  }
              }
    
        }
        T->height = deep(T->left)>deep(T->right)?deep(T->left)+1:deep(T->right)+1;
    
    
    
    
    
    
    
        return T;
    }
    
    Node Creat()
    {
        Node T = NULL;
        int i;
        int num;//插入的数
        for(i = 0; i < N; i++)
        {
    
            scanf("%d", &num);
            T = Insert(T, num);
    
        }
        return T;
    }
    
    
    
    
    int main ()
    {
    
        Node root = NULL;//根节点
        scanf("%d",&N);
        root = Creat();
        printf("%d", root->data);
    
    
    
        return 0;
    }
    
    
    
    
  • 相关阅读:
    什么是webview
    juqery.fn.extend和jquery.extend
    LeetCode
    5. Longest Palindromic Substring
    42. Trapping Rain Water
    11. Container With Most Water
    621. Task Scheduler
    49. Group Anagrams
    739. Daily Temperatures
    3. Longest Substring Without Repeating Characters
  • 原文地址:https://www.cnblogs.com/TJack/p/10526953.html
Copyright © 2020-2023  润新知