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;
    }
    
    
    
    
  • 相关阅读:
    Jackson 框架,轻易转换JSON
    Java Thread 多线程 操作线程
    Oracle笔记 四、增删改、事务
    Oracle笔记 六、PL/SQL简单语句块、变量定义
    Java 的JSON、XML转换方法——目录索引
    SpringMVC 中整合JSON、XML视图一
    FreeMarker整合Spring 3
    Java Thread 多线程 介绍
    Jaxb2 转换XML文档
    Java Thread 多线程同步、锁、通信
  • 原文地址:https://www.cnblogs.com/TJack/p/10526953.html
Copyright © 2011-2022 走看看