首页 > 编程语言 >算法与数据结构Day03——平衡二叉树的根

算法与数据结构Day03——平衡二叉树的根

时间:2023-06-19 14:23:56浏览次数:41  
标签:Right return Day03 T2 AVLTree T1 二叉树 数据结构 Left

#include <stdio.h>
#include<stdlib.h>
typedef struct node *AVLTree;
struct node{
    int Data;
    AVLTree Left;
    AVLTree Right;
};
int High(AVLTree T){
    if(!T)
        return 0;
    int left=High(T->Left)+1;
    int right=High(T->Right)+1;
    return left>right?left:right;
}
AVLTree LL(AVLTree T){
    AVLTree T1;
    T1=T->Right;
    T->Right=T1->Left;
    T1->Left=T;
    return T1;
}
AVLTree RR(AVLTree T){
    AVLTree T1;
    T1=T->Left;
    T->Left=T1->Right;
    T1->Right=T;
    return T1;
}
AVLTree LR(AVLTree T){
    AVLTree T1,T2;
    T1=T->Left;
    T2=T1->Right;
    T->Left=NULL;
    T2->Right=T;
    T1->Right=NULL;
    T2->Left=T1;
    return T2;
}
AVLTree RL(AVLTree T){
    AVLTree T1,T2;
    T1=T->Right;
    T2=T1->Left;
    T->Right=NULL;
    T2->Left=T;
    T1->Left=NULL;
    T2->Right=T1;
    return T2;
}
AVLTree Insert(AVLTree T,int x){
    if(!T){
        AVLTree T =(AVLTree)malloc(sizeof(struct node));
        T->Data=x;
        T->Left=T->Right=NULL;
        return T;
    }else if(x>T->Data){
        T->Right=Insert(T->Right,x);
        if((High(T->Right)-High(T->Left))>=2){
            if(x>T->Right->Data)
                T=LL(T);
            else
                T=RL(T);
        }
    }else if(x<T->Data){
        T->Left=Insert(T->Left,x);
        if((High(T->Left)-High(T->Right))==2){
            if(x<T->Left->Data)
                T=RR(T);
            else
                T=LR(T);
        }
    }
    return T;
}
int main() {
    int n,x;
    AVLTree T=NULL;
    scanf("%d",&n);
    for (int i = 0; i < n; i++) {
        scanf("%d",&x);
        T=Insert(T,x);
    }
    printf("%d\n",T->Data);
    return 0;
}

 

#include <stdio.h>#include<stdlib.h>typedef struct node *AVLTree;struct node{    int Data;    AVLTree Left;    AVLTree Right;};int High(AVLTree T){    if(!T)        return 0;    int left=High(T->Left)+1;    int right=High(T->Right)+1;    return left>right?left:right;}AVLTree LL(AVLTree T){    AVLTree T1;    T1=T->Right;    T->Right=T1->Left;    T1->Left=T;    return T1;}AVLTree RR(AVLTree T){    AVLTree T1;    T1=T->Left;    T->Left=T1->Right;    T1->Right=T;    return T1;}AVLTree LR(AVLTree T){    AVLTree T1,T2;    T1=T->Left;    T2=T1->Right;    T->Left=NULL;    T2->Right=T;    T1->Right=NULL;    T2->Left=T1;    return T2;}AVLTree RL(AVLTree T){    AVLTree T1,T2;    T1=T->Right;    T2=T1->Left;    T->Right=NULL;    T2->Left=T;    T1->Left=NULL;    T2->Right=T1;    return T2;}AVLTree Insert(AVLTree T,int x){    if(!T){        AVLTree T =(AVLTree)malloc(sizeof(struct node));        T->Data=x;        T->Left=T->Right=NULL;        return T;    }else if(x>T->Data){        T->Right=Insert(T->Right,x);        if((High(T->Right)-High(T->Left))>=2){            if(x>T->Right->Data)                T=LL(T);            else                T=RL(T);        }    }else if(x<T->Data){        T->Left=Insert(T->Left,x);        if((High(T->Left)-High(T->Right))==2){            if(x<T->Left->Data)                T=RR(T);            else                T=LR(T);        }    }    return T;}int main() {int n,x;AVLTree T=NULL;scanf("%d",&n);for (int i = 0; i < n; i++) {    scanf("%d",&x);    T=Insert(T,x);}printf("%d\n",T->Data);return 0;}  

标签:Right,return,Day03,T2,AVLTree,T1,二叉树,数据结构,Left
From: https://www.cnblogs.com/yingxq/p/17491036.html

相关文章

  • 20230227 0. 数据结构-浙大【归档】
    前言这个视频是大学教学内容,之前也学习过尚硅谷的视频课程,相对于尚硅谷的,内容要更全面一些,有对应的教材,但是语言是C,尚硅谷的实例更多一些。对于入门来说,这个视频教程更好一些目录概论202302271.1.什么是数据结构202302271.2.什么是算法202302271.3.应用实例线......
  • 数据结构---图
    数据结构---图图的定义和基本术语V:顶点的有穷非空集合E:边的有穷集合无向图:每条边都是无方向.有向图:每条边都是有方向的.完全图:任意两个点都有一条边相连.无向完全图:n个顶点,至少n(n-1)/2条边.有向完全图:n个顶点,至少n(n-1)条边.稀疏图:有很少边或弧(带箭头的边)......
  • 【数据结构】带头双向循环链表
    ......
  • C++常用数据结构
    数据结构1.线性表由n个具有相同性质的数据元素1.1顺序表(数组)定义:用一组地址连续的存储单元依次存储线性表中每个数据元素特点:逻辑关系相邻的两个元素在物理位置上也相邻#c++实现template<typenameT>classsqlist{public:sqlist(intmaxsize=10):Maxsize(......
  • 二叉树03
    104二叉树的最大深度用递归的写法。递归的思路是,当前树的深度=max(左子树深度,右子树深度)+1  111二叉树的最小深度 对于上面这颗二叉树,离root最近的叶子节点是4,所以最小深度是3(路径1-2-4,有3个节点)。而如果我们直接把递归里的max改成min,由于root节点的左节点是N......
  • Redis - 数据结构类型及使用场景详解
    一.简介Redis是由SalvatoreSanfilippo编写的一个key-value存储系统,是跨平台的非关系型数据库。Redis是一个开源的,使用C语言编写的,遵守BSD协议,支持网络,可基于内存,分布式,可选持久性的键值对(key-value)存储数据库,并且提供了多种语言的API。二.特性1.基于内存存储(不开启持久化的......
  • 算法与数据结构Day01
    希尔排序的实现#include<stdio.h>#include<stdlib.h>typedefintKeyType;typedefstruct{KeyType*elem;/*elem[0]一般作哨兵或缓冲区*/intLength;}SqList;voidCreatSqList(SqList*L);/*待排序列建立,......
  • 算法与数据结构Day02
    修建道路#include<stdio.h>#include<string.h>#include<algorithm>usingnamespacestd;intinf=0x3f3f3f;intmap[105][105],dis[105],book[105];intm,n;intprim(){inti,j,k,sum=0,u,min;for(i=1;i<=n;i++){......
  • 算法与数据结构——kmp算法
    7-1jmu-ds-实现KMP分数 10#include<stdio.h>#include<iostream>#include<string.h>usingnamespacestd;constintMAX_LEN=20010;//本题运用到字符串比对中的next[j]求法具体算法可以直接百度//get_next就是用于求next[j]的这里只需要传入目标串就行voidget_nex......
  • 数据结构课程设计2023夏7-4 先序和中序构造二叉树
    本题目要求用先序序列和中序序列构造一棵二叉树(树中结点个数不超过10个),并输出其后序序列。输入格式:在第一行中输入元素个数。第二行中输入先序序列,用空格分隔。第三行中输入中序序列,用空格分隔。输出格式:输出此二叉树的后序序列,用空格分隔,最后也有一个空格。输入样例:......