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

来源:互联网 发布:中国期刊 数据库 编辑:程序博客网 时间:2024/06/16 07:55

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

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;typedef int element;struct Tree{    element data;    int deep;    Tree *lchild, *rchild;};int Max(int a, int b){    return a>b?a:b;}int Deep(Tree *T){    if(!T)        return -1;    else        return T->deep;}Tree *LL(Tree *T){ //右旋    Tree *p = T->lchild;    T->lchild = p->rchild;    p->rchild = T;    p->deep = Max(Deep(p->lchild), Deep(p->rchild))+1;    T->deep = Max(Deep(T->lchild), Deep(T->rchild))+1;    return p;}Tree *RR(Tree *T){  //左旋    Tree *p = T->rchild;    T->rchild = p->lchild;    p->lchild = T;    p->deep = Max(Deep(p->lchild), Deep(p->rchild))+1;    T->deep = Max(Deep(T->lchild), Deep(T->rchild))+1;    return p;}Tree *LR(Tree *T){   //先左旋后右旋      T->lchild = RR(T->lchild);    return LL(T);}Tree *RL(Tree *T){   //先右旋后左旋    T->rchild = LL(T->rchild);    return RR(T);}Tree *Creat(Tree *T, int n){    if(!T){        T = new Tree;        T->data = n;        T->deep = 0;        T->lchild = T->rchild = NULL;    }    else{        if(n<T->data){            T->lchild = Creat(T->lchild, n);            if(Deep(T->lchild)-Deep(T->rchild)>1){                if(T->lchild->data > n)                    T = LL(T);                else                    T = LR(T);            }        }        else if(n>T->data){            T->rchild = Creat(T->rchild, n);            if(Deep(T->rchild)-Deep(T->lchild)>1){                if(T->rchild->data<n)                    T = RR(T);                else                    T = RL(T);            }        }    }    T->deep = Max(Deep(T->lchild), Deep(T->rchild)) + 1;    return T;}int main(){    int n,m;    Tree *T = NULL;    cin>>n;    for(int i = 0;i < n;i++){        cin>>m;        T = Creat(T,m);    }    cout<<T->data<<endl;    return 0;}



阅读全文
0 0
原创粉丝点击