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

来源:互联网 发布:九九乘法表java代码 编辑:程序博客网 时间:2024/06/05 17:04


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

Time Limit: 400MS Memory Limit: 65536KB
SubmitStatistic

Problem Description

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

Input

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

Output

输出平衡二叉树的树根。

Example Input

588 70 61 96 120

Example Output

70
#include <bits/stdc++.h>using namespace std;struct node{    int data;    int d;    struct node *l, *r;};int max(int x, int y){    return x > y?x:y;}int deep(struct node *head){    if(head==NULL)    {        return -1;    }    else    {        return head->d;    }}struct node *LL(struct node *head){    struct node *q;    q = head -> l;    head -> l = q -> r;    q -> r = head;    head -> d = max(deep(head->l), deep(head->r) )+1;    q->d = max(deep(q->l), deep(q->r)) +1;    return q;};struct node *RR(struct node *head){    struct node *q;    q = head -> r;    head -> r = q -> l;    q -> l = head;    head -> d = max(deep(head->l), deep(head->r) )+1;    q->d = max(deep(q->l), deep(q->r)) +1;    return q;};struct node *LR(struct node *root){    root -> l = RR(root->l);    return LL(root);};struct node *RL(struct node *root){    root -> r = LL(root->r);    return RR(root);};struct node *creat(struct node *root, int x){    if(root == NULL)    {        root = new node;        root -> data = x;        root->l = root->r = NULL;    }    else if(x < root->data)    {        root -> l = creat(root->l, x);        if(deep(root->l) -deep(root->r) > 1)        {            if(x < root->l->data)            {                root = LL(root);            }            else            {                root = LR(root);            }        }    }    else    {        root ->r = creat(root->r, x);        if(deep(root->r) - deep(root->l) > 1)        {            if(x > root->r->data)            {                root = RR(root);            }            else            {                root = RL(root);            }        }    }    root -> d = max(deep(root->l), deep(root->r)) +1;    return root;};int main(){    int n;    int x, i;    cin >> n;    struct node *root = NULL;    for(i = 0; i < n; i++)    {        cin >> x;        root = creat(root, x);    }    cout << root->data << endl;    return 0;}
阅读全文
0 0
原创粉丝点击