zoukankan      html  css  js  c++  java
  • 平衡二叉树的学习

    数据结构实验之查找二:平衡二叉树
    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;
    }
    
    
    
    
  • 相关阅读:
    收藏的一些前端学习的网址
    使用box-shadow 实现水波、音波的效果
    asyncjs,waterfall的使用
    兼容opacity的方法
    在php框架中写正规则表达式时的磕绊
    浏览器的渲染原理
    正规则表达式判断数字
    ie6,7,8不兼容rgba,写background时候不要写成rgba
    jquery-ias插件详解
    制作手机页面过程中遇到的一点问题
  • 原文地址:https://www.cnblogs.com/TJack/p/10526953.html
Copyright © 2011-2022 走看看