首页 > 学院 > 开发设计 > 正文

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

2019-11-06 06:21:27
字体:
来源:转载
供稿:网友

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

TimeLimit: 400MS Memory Limit: 65536KB

SubmitStatistic

PRoblem Description

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

Input

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

Output

输出平衡二叉树的树根。

Example Input

5

88 70 6196 120

Example Output

70

Hint

 

Author

xam 

#include<stdio.h>#include<string.h>#include<stdlib.h>#include<queue>#include<math.h>#include<iostream>#include<algorithm>using namespace std;typedef struct node{   int data;   int d;   struct node *l,*r;}tree;int deep(tree*root){   if(!root)   return -1;   else   return root->d;}tree* LL(tree*root)//左左情况进行右旋{    tree*p = root->l;    root->l = p->r;    p->r = root;    p->d =max(deep(p->l),deep(p->r))+1;    root->d = max(deep(root->l),deep(root->r))+1;    return p;}tree* RR(tree*root){    tree*p = root->r;    root->r = p-> l;    p->l = root;    p->d =max(deep(p->l),deep(p->r))+1;    root->d = max(deep(root->l),deep(root->r))+1;    return p;}tree* LR(tree*root)//左右情况先进行左旋(右右),然后左旋(左左){    root->l = RR(root->l);    return LL(root);}tree* RL(tree*root){    root->r = LL(root->r);    return RR(root);}tree* creat(tree*root,int x){    if(root==NULL)    {       root = (tree*)malloc(sizeof(tree));       root->d = 0;       root->data = x;       root->l = root->r = NULL;    }    else if(root->data>x)    {         root->l = creat(root->l,x);         if(deep(root->l)-deep(root->r)>1)         {             if(root->l->data>x)             {                root = LL(root);             }             else             {                  root = LR(root);             }         }    }    else if(root->data<=x)    {         root->r = creat(root->r,x);         if(deep(root->r)-deep(root->l)>1)         {              if(root->r->data>x)              {                  root = RL(root);              }              else                root = RR(root);         }    }    root->d = max(deep(root->l),deep(root->r))+1;//及时更新每个节点的深度    return root;}int main(){   int n,i,x;   scanf("%d",&n);   tree*root = NULL;   for(i = 0;i < n;i++)   {      scanf("%d",&x);      root = creat(root,x);   }   printf("%d/n",root->data);  return 0;}/***************************************************User name: jk160505徐红博Result: AcceptedTake time: 0msTake Memory: 152KBSubmit time: 2017-02-08 15:25:50****************************************************/

 


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表