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

来源:互联网 发布:家具设计软件 编辑:程序博客网 时间:2024/06/01 09:08

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

Time Limit: 400MS Memory Limit: 65536KB

Problem Description

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

Input

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

Output

输出平衡二叉树的树根。

Example Input

588 70 61 96 120

Example Output

70

Hint
#include <stdio.h>#include <stdlib.h>struct tree{    int data, dp;    struct tree *l, *r;};int max(int x,int y){    return x > y? x : y;}int deep(struct tree *t){    if(t == NULL)    {        return -1;    }    else    {        return t -> dp;    }}struct tree *LL(struct tree *t){    struct tree *p;    p = t -> l;    t -> l = p -> r;    p -> r = t;    p -> dp = max(deep(p -> l),t -> dp) + 1;    t -> dp = max(deep(t -> l),deep(t -> r)) + 1;    return p;}struct tree *RR(struct tree *t){    struct tree *p;    p = t -> r;    t -> r = p -> l;    p -> l = t;    p -> dp = max(deep(p->r),t->dp) + 1;    t -> dp = max(deep(t->l),deep(t->r)) + 1;    return p;}struct tree *RL(struct tree *t){    t -> r = LL(t -> r);    return RR(t);}struct tree *LR(struct tree *t){    t -> l = RR(t -> l);    return LL(t);};struct tree *create(struct tree *t, int x){    if(t == NULL)    {        t=(struct tree *)malloc(sizeof(struct tree));        t -> l = NULL;        t -> r = NULL;        t -> data = x;        t -> dp = 0;    }    else if(x < t -> data)    {        t -> l = create(t -> l, x);        if(deep(t -> l) - deep(t -> r) > 1)        {            if(x < t -> l -> data)            {                t = LL(t);            }            else            {                t = LR(t);            }        }    }    else if(x > t -> data)    {        t -> r = create(t -> r, x);        if(deep(t -> r) - deep(t -> l) > 1)        {            if(x > t -> r -> data)            {                t = RR(t);            }            else            {                t = RL(t);            }        }    }    t -> dp = max(deep(t -> l),deep(t -> r)) + 1;    return t;}int main(){    int n, i, x;    scanf("%d", &n);    struct tree *root = NULL;    for(i = 1; i <= n; i++)    {        scanf("%d", &x);        root = create(root, x);    }    printf("%d", root -> data);    return 0;}

 

Author





0 0
原创粉丝点击