数据结构实验之查找二:平衡二叉树

来源:互联网 发布:pes贝克汉姆捏脸数据 编辑:程序博客网 时间:2024/05/19 19:44

数据结构实验之查找二:平衡二叉树

Time Limit: 400ms   Memory limit: 65536K  有疑问?点这里^_^

题目描述

根据给定的输入序列建立一棵平衡二叉树,求出建立的平衡二叉树的树根。

输入

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

输出

输出平衡二叉树的树根。

示例输入

588 70 61 96 120

示例输出

70

#include<bits/stdc++.h>using namespace std;struct node{    int data;    int d;    struct node *l,*r;};int Deep(struct node *head){    if(head)        return head->d;    return -1;}struct node *LL(struct node *head){    struct node *q=head->l;    head->l=q->r;    q->r=head;    q->d=max(Deep(q->l),Deep(q->r))+1;    head->d=max(Deep(head->l),Deep(head->r))+1;    return q;}struct node *RR(struct node *head){    struct node *q=head->r;    head->r=q->l;    q->l=head;    q->d=max(Deep(q->l),Deep(q->r))+1;    head->d=max(Deep(head->l),Deep(head->r))+1;    return q;}struct node *RL(struct node *head){    head->l=RR(head->l);    return LL(head);}struct node *LR(struct node *head){    head->r=LL(head->r);    return RR(head);}struct node *Creat(struct node *head,int x){    if(!head)    {        head=(struct node *)malloc(sizeof(struct node));        head->l=NULL;        head->r=NULL;        head->data=x;        head->d=0;    }    else if(x<head->data)    {        head->l=Creat(head->l,x);        if(Deep(head->l)-Deep(head->r)>1)        {            if(x<head->l->data)                head=LL(head);            else                head=LR(head);        }    }    else if(x>head->data)    {        head->r=Creat(head->r,x);        if(Deep(head->r)-Deep(head->l)>1)        {            if(x>head->r->data)                head=RR(head);            else                head=RL(head);        }    }    head->d=max(Deep(head->l),Deep(head->r))+1;    return head;}int main(){    int n,x;    scanf("%d",&n);    struct node *head=NULL;    while(n--)    {        scanf("%d",&x);        head=Creat(head,x);    }    printf("%d\n",head->data);    return 0;}


0 0