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

来源:互联网 发布:你不知道的js中文pdf版 编辑:程序博客网 时间:2024/05/20 02:54

点击打开链接

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

Time Limit: 400MS Memory limit: 65536K

题目描述

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

输入

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

输出

输出平衡二叉树的树根。

示例输入

588 70 61 96 120

示例输出

70

#include<stdio.h>#include<stdlib.h>typedef struct tnode{    struct tnode *lc,*rc;    int dep;    int data;}tnode,*tree;int depth(tree T){    if(T==NULL)        return -1;    else        return T->dep;}int max(int x,int y){    if(x>y)        return x+1;    else        return y+1;}tree LL(tree T){    tree p=T->lc;    T->lc=p->rc;    p->rc=T;    T->dep=max(depth(T->lc),depth(T->rc));    p->dep=max(depth(p->lc),depth(p->rc));    return p;}tree RR(tree T){    tree p=T->rc;    T->rc=p->lc;    p->lc=T;    T->dep=max(depth(T->lc),depth(T->rc));    p->dep=max(depth(p->lc),depth(p->rc));    return p;}tree RL(tree T){    T->rc=LL(T->rc);    return RR(T);}tree LR(tree T){    T->lc=RR(T->lc);    return LL(T);}void creat(tree &T,int x){    if(T==NULL)    {        T=(tree)malloc(sizeof(tnode));        T->dep=0;        T->lc=T->rc=NULL;        T->data=x;    }    if(x<T->data)    {        creat(T->lc,x);        if(depth(T->lc)-depth(T->rc)==2)        {            if(x<T->lc->data)                T=LL(T);            else                T=LR(T);        }    }    else if(x>T->data)    {        creat(T->rc,x);        if(depth(T->lc)-depth(T->rc)==-2)        {            if(x>T->rc->data)                T=RR(T);            else                T=RL(T);        }    }    T->dep=max(depth(T->lc),depth(T->rc));}int main(){    tree T=NULL;    int n,i,j;    scanf("%d",&n);    for(i=0;i<n;i++)    {        scanf("%d",&j);        creat(T,j);    }    printf("%d",T->data);    return 0;}


0 0