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

来源:互联网 发布:淘宝卖家申诉入口 编辑:程序博客网 时间:2024/06/08 16:20

Problem Description

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

Input

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

Output

输出平衡二叉树的树根。

Example Input

588 70 61 96 120

Example Output

70
#include<stdio.h>#include<stdlib.h>#include<iostream>using namespace std;struct node{    int data, d;    node *l,*r;};int Deep(node *head){    if(head==NULL)        return -1;    return head->d;}node *LL(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;}node *RR(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;}node *LR(node *head){    head->l=RR(head->l);    return LL(head);}node *RL(node *head){    head->r=LL(head->r);    return RR(head);}node *Creat(struct node *head,int x){    if(!head)    {        head=new node;        head->l = 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,m;    scanf("%d",&n);    node *head=NULL;    for(int i=0;i<n;i++)    {        scanf("%d",&m);        head=Creat(head,m);    }    printf("%d\n",head->data);    return 0;}


0 0
原创粉丝点击