日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2024/8/23 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构实验之查找二:平衡二叉树 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目描述

根據給定的輸入序列建立一棵平衡二叉樹,求出建立的平衡二叉樹的樹根。

輸入

輸入一組測試數據。數據的第1行給出一個正整數N(n <= 20),N表示輸入序列的元素個數;第2行給出N個正整數,按數據給定順序建立平衡二叉樹。

輸出

輸出平衡二叉樹的樹根。

示例輸入

5 88 70 61 96 120

示例輸出

70


/*#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<algorithm>
using namespace std;
typedef struct BNode
{
? ? int data;
? ? int d;//記錄樹的深度;
? ? BNode *lchild,*rchild;
}*BiTree;
int deep(BiTree &T)
{
? ? if(!T)
? ? return 0;
? ? return T->d;
}
BiTree LL(BiTree &T)//向右旋型
{
? ? BiTree p;
? ? p=T->lchild;
? ? T->lchild=p->rchild;
? ? p->rchild=T;
? ? p->d=max(deep(p->lchild),deep(p->rchild))+1;
? ? T->d=max(deep(T->lchild),deep(T->rchild))+1;
? ? return p;
}
BiTree RR(BiTree &T)//向左型旋;
{
? ? BiTree p;
? ? p=T->rchild;
? ? T->rchild=p->lchild;
? ? p->lchild=T;
? ? p->d=max(deep(p->lchild),deep(p->rchild))+1;
? ? T->d=max(deep(T->lchild),deep(T->rchild))+1;
? ? return p;
}
BiTree LR(BiTree &T)//旋轉分兩步:1.以a為根結點的RR旋轉 2.以x為根結點的LL旋轉
{
? ? T->lchild=RR(T->lchild);
? ? return LL(T);
}
BiTree RL(BiTree &T)//旋轉分兩步:1.以a為根結點的LL旋轉 2.以x為根結點的RR旋轉
{
? ? T->rchild=LL(T->rchild);
? ? return RR(T);
}
BiTree Insert(BiTree &T,int n)
{
? ? if(!T)
? ? {
? ? ? ? T=new BNode;
? ? ? ? T->lchild=T->rchild=NULL;
? ? ? ? T->data=n;
? ? ? ? T->d=1;
? ? }
? ? else if(n<T->data)
? ? {
? ? ? ? T->lchild=Insert(T->lchild,n);
? ? ? ? if(deep(T->lchild)-deep(T->rchild)>1)
? ? ? ? {
? ? ? ? ? ? if(n<T->lchild->data)
? ? ? ? ? ? ? ? T=LL(T);
? ? ? ? ? ? else
? ? ? ? ? ? ? ? T=LR(T);
? ? ? ? }
? ? }
? ? else if(n>T->data)
? ? {
? ? ? ? T->rchild=Insert(T->rchild,n);
? ? ? ? if(deep(T->rchild)-deep(T->lchild)>1)
? ? ? ? {
? ? ? ? ? ? if(n>T->rchild->data)
? ? ? ? ? ? ? ? T=RR(T);
? ? ? ? ? ? else
? ? ? ? ? ? ? ? T=RL(T);
? ? ? ? }
? ? }
? ? T->d=max(deep(T->lchild),deep(T->rchild))+1;
? ? return T;
}
int main()
{
? ?int n,num;
? ?scanf("%d",&n);
? ?BiTree T;
? ?T=NULL;//樹的初始化。
? ?for(int i=0;i<n;i++)
? ?{
? ? ? ?scanf("%d",&num);
? ? ? ?Insert(T,num);
? ?}
? ?printf("%d\n",T->data);
? ? return 0;
}*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<algorithm>//max函數在此頭文件中;
using namespace std;
typedef struct BNode
{
? ? int data;
? ? int d;
? ? BNode *lchild,*rchild;
}*BiTree;
int n;
int deep(BiTree T)
{
? ? if(!T)
? ? return -1;
? ? return T->d;
}
BiTree LL(BiTree &T)
{
? ? BiTree p;
? ? p=T->lchild;
? ? T->lchild=p->rchild;
? ? p->rchild=T;
? ? p->d=max(deep(p->lchild),deep(p->rchild))+1;
? ? T->d=max(deep(T->lchild),deep(T->rchild))+1;
? ? return p;
}
BiTree RR(BiTree &T)
{
? ? BiTree p;
? ? p=T->rchild;
? ? T->rchild=p->lchild;
? ? p->lchild=T;
? ? p->d=max(deep(p->rchild),deep(p->lchild))+1;
? ? T->d=max(deep(T->rchild),deep(T->lchild))+1;
? ? return p;
}
BiTree LR(BiTree &T)
{
? ? T->lchild=RR(T->lchild);
? ? return LL(T);
}
BiTree RL(BiTree &T)
{
? ? T->rchild=LL(T->rchild);
? ? return RR(T);
}
BiTree Insert(BiTree &T,int x)
{
? ? if(!T)
? ? {
? ? ? ? T=new BNode;
? ? ? ? T->lchild=T->rchild=NULL;
? ? ? ? T->data=x;
? ? ? ? T->d=0;
? ? }
? ? else if(x<T->data)
? ? {
? ? ? ? Insert(T->lchild,x);
? ? ? ? if(deep(T->lchild)-deep(T->rchild)>1)
? ? ? ? {
? ? ? ? ? ? if(x<T->lchild->data)
? ? ? ? ? ? ? ? T=LL(T);
? ? ? ? ? ? else
? ? ? ? ? ? ? ? T=LR(T);
? ? ? ? }
? ? }
? ? else if(x>=T->data)
? ? {
? ? ? ? Insert(T->rchild,x);
? ? ? ? if(deep(T->rchild)-deep(T->lchild)>1)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? if(x>T->rchild->data)
? ? ? ? ? ? ? ? ? ?T=RR(T);
? ? ? ? ? ? ? ? else
? ? ? ? ? ? ? ? ? ?T=RL(T);
? ? ? ? ? ? }
? ? }
? ? T->d=max(deep(T->rchild),deep(T->lchild))+1;
? ? return T;
}
int main()
{
? ? scanf("%d",&n);
? ? int num;
? ? BiTree T;
? ? T=NULL;
? ? for(int i=1;i<=n;i++)
? ? {
? ? ? ? scanf("%d",&num);
? ? ? ?T=Insert(T,num);
? ? }
? ? printf("%d\n",T->data);
}


總結

以上是生活随笔為你收集整理的数据结构实验之查找二:平衡二叉树的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。