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

来源:互联网 发布:海战网络手游哪个好玩 编辑:程序博客网 时间:2024/06/08 16:04

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

Time Limit: 400MS Memory limit: 65536K

题目描述

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

输入

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

输出

输出平衡二叉树的树根。

示例输入

588 70 61 96 120

示例输出

70

提示

 

来源

xam 7
#include<bits/stdc++.h>using namespace std;typedef struct node{    int data;    int d;    struct node *lchild;    struct node *rchild;} node,*Tree;int deep(Tree &t){    if(!t)    {        return -1;    }    else    {        return t->d;    }}Tree LL(Tree &t)//左单旋转{    Tree Q;    Q=t->lchild;    t->lchild=Q->rchild;    Q->rchild=t;    Q->d=max(deep(Q->lchild),deep(Q->rchild))+1;    t->d=max(deep(t->lchild),deep(t->rchild))+1;    return Q;}Tree RR(Tree &t)//右单旋转{    Tree Q;    Q=t->rchild;;    t->rchild=Q->lchild;    Q->lchild=t;    Q->d=max(deep(Q->lchild),deep(Q->rchild))+1;    t->d=max(deep(t->lchild),deep(t->rchild))+1;    return Q;}Tree LR(Tree &t){    t->lchild=RR(t->lchild);    return LL(t);}Tree RL(Tree &t){    t->rchild=LL(t->rchild);    return RR(t);}Tree Insert(Tree &t,int x){    if(!t)    {        t=new(node);        t->lchild=NULL;        t->rchild=NULL;        t->d=0;        t->data=x;    }    else if(x<t->data)    {        t->lchild=Insert(t->lchild,x);        if(deep(t->lchild)-deep(t->rchild)>1)        {            if(x<t->lchild->data)            {                t=LL(t);            }            else            {                t=LR(t);            }        }    }    else if(x>t->data)    {        t->rchild=Insert(t->rchild,x);        if(deep(t->rchild)-deep(t->lchild)>1)        {            if(x>t->data)            {                t=RR(t);            }            else            {                t=RL(t);            }        }    }    t->d=max(deep(t->lchild),deep(t->rchild))+1;    return t;}int main(){    Tree t;    int n,num;    cin>>n;    t=NULL;    for(int i=0; i<n; i++)    {        cin>>num;        Insert(t,num);    }    cout<<t->data<<endl;}


0 0
原创粉丝点击