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

来源:互联网 发布:网络歌曲主的爱 编辑:程序博客网 时间:2024/06/06 10:49

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

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 height;    node *left;    node *right;};int height(node *root){    if(root==NULL)return 0;    return root->height;}node* LL(node *root){    node* temp;    temp=root->left;    root->left=temp->right;    temp->right=root;    root->height=max(height(root->left),height(root->right))+1;    temp->height=max(height(temp->left),height(temp->right))+1;    return temp;}node* RR(node *root){    node*temp;    temp=root->right;    root->right=temp->left;    temp->left=root;    root->height=max(height(root->left),height(root->right))+1;    temp->height=max(height(temp->left),height(temp->right))+1;    return temp;}node* LR(node *root){    root->left=LL(root->left);    return LL(root);}node* RL(node *root){    root->right=RR(root->right);    return RR(root);}node* creat(node *root,int data){    if(root==NULL)    {        root=new node;        root->data=data;        root->left=root->right=NULL;        root->height=1;    }    else if(data>root->data)    {        root->right=creat(root->right,data);        if(height(root->right)-height(root->left)==2)        {            if(data>root->right->data)root=RR(root);            else  root=RL(root);        }    }    else if(data<root->data)    {        root->left=creat(root->left,data);        if(height(root->left)-height(root->right)==2)        {            if(data>root->left->data)root=LR(root);            else  root=LL(root);        }    }    root->height=max(height(root->left),height(root->right))+1;    return root;}int main(){    node *root=NULL;    int num;    cin>>num;    for(int i=0;i<num;i++)    {        int data;        cin>>data;        root=creat(root,data);    }    printf("%d\n",root->data);}

0 0