当前位置: 首页 > news >正文

怎么做自己的网站后台教程西安网站建设gj

怎么做自己的网站后台教程,西安网站建设gj,上海的网站设计公司价格,怎样建设档案馆网站题目要求: AVL 树是一种自平衡的二叉搜索树。在 AVL 树中,任何节点的两个子子树的高度最多相差一;如果在任何时候它们相差不止一,则进行重新平衡以恢复此属性。图 1-4 说明了旋转规则。 图1 图2 图3 图4 现在给定一系列插入,您应该…

 题目要求:

AVL 树是一种自平衡的二叉搜索树。在 AVL 树中,任何节点的两个子子树的高度最多相差一;如果在任何时候它们相差不止一,则进行重新平衡以恢复此属性。图 1-4 说明了旋转规则。

 

                                图1

                                图2

                                图3

                                图4

现在给定一系列插入,您应该分辨生成的 AVL 树的根。

输入规格: 

 每个输入文件都包含一个测试用例。对于每种情况,第一行都包含一个正整数N(<=20),这是要插入的键的总数。然后N不同的整数键在下一行中给出。一行中的所有数字都用空格分隔。

输出规格: 

 对于每个测试用例,将生成的 AVL 树的根打印在一行中。

示例输入 1: 

 5
88 70 61 96 120

 示例输出 1:

 70

题解: 

        思路如注释所示,可通过所有测试点。

#include<bits/stdc++.h>
using namespace std;   
typedef struct AVLNode *Position;
typedef Position AVLTree;
typedef int ElementType;
struct AVLNode{ElementType Data;AVLTree Left;AVLTree Right;int Hight; 
};             int Max(int a,int b){return a > b ? a:b;
}int GetHight(AVLTree A)
{return A == NULL ? -1 : A->Hight;
}AVLTree SingleLeftRotation(AVLTree A){AVLTree B = A->Left;A->Left = B->Right;B->Right = A;A->Hight = Max( GetHight(A->Left), GetHight(A->Right) ) + 1;B->Hight = Max( GetHight(B->Left), A->Hight ) + 1;return B;
}AVLTree SingleRightRotation(AVLTree A){AVLTree B = A->Right;A->Right = B->Left;B->Left = A;A->Hight = Max( GetHight(A->Left), GetHight(A->Right) ) + 1;B->Hight = Max( GetHight(B->Right), A->Hight ) + 1;return B; 
}AVLTree DoubleLeftRightRotation(AVLTree A){/* 注意:A必须有一个左子结点B,且B必须有一个右子结点C *//* 将A、B与C做两次单旋,返回新的根结点C *//* 将B与C做右单旋,C被返回 */A->Left = SingleRightRotation(A->Left);/* 将A与C做左单旋,C被返回 */return SingleLeftRotation(A);
}AVLTree DoubleRightLeftRotation(AVLTree A){A->Right = SingleLeftRotation(A->Right);return SingleRightRotation(A);	
}AVLTree Insert(AVLTree T,ElementType X){if(!T){ //若插入空树。则新建一个结点 T = (AVLTree)malloc(sizeof(struct AVLNode));T->Data = X;T->Hight = 0;T->Left = NULL;T->Right = NULL;}	else if(X < T->Data){ //插入左树 T->Left = Insert(T->Left,X);if(GetHight(T->Left)-GetHight(T->Right) == 2){   //出现不平衡           if(X < T->Left->Data)T = SingleLeftRotation(T);   //插入在左树的左边->单左旋elseT = DoubleLeftRightRotation(T);   //插入再左树的右边->左右双旋				}}else if(X > T->Data){ //插入右树T->Right = Insert(T->Right,X);if(GetHight(T->Right)-GetHight(T->Left) == 2){   //出现不平衡 if(X > T->Right->Data)T = SingleRightRotation(T);      //单右旋 elseT = DoubleRightLeftRotation(T);	 	//右左旋 }} else return T;T->Hight = Max(GetHight(T->Left),GetHight(T->Right))+1;return T;
}int main(){AVLTree T = NULL;int t;cin>>t;while(t--){int num;cin>>num;T = Insert(T,num);}cout<<T->Data;
}

此题有以下几个要注意的点:

        1.Hight是指把 一个给定结点作为根节点时,其代表的树的树高,这样当左右子树树高差大于等于2时,可以发现平衡树失衡。

        2.树高取左右子树的最大值。

        3.左右双旋的时候在代码层面实际是先右单旋再左单旋,右左单旋时同理。

这里感觉何老师的ppt很清晰,(引一下,侵删)重点是找到“麻烦结点”对“不平衡发现者”是怎样破环的

 

http://www.yayakq.cn/news/988722/

相关文章:

  • 杭州seo网站推广国外网站模板网站建设
  • 房屋租赁网站开发模版重庆工厂网站建设
  • 网上鲜花店网站建设实施方案商城手机网站开发
  • 视频直播网站网站跳出率 查询
  • 建成区违法建设治理网站商城网站建设公司地址
  • 关于建设旅游网站的书籍265上网导航
  • 企业网站如何做网警备案网站推广的目的是什
  • 网站开发服务合同范本百度怎么做网页
  • 下载建设网站软件长沙今天最新招聘信息
  • 做网站的人会不会拿走我的网站官方网站建设与维护好处
  • 南阳网站怎么推广单位网站建设建议对策
  • 专业网站设计制作费用自己有网站做点什么
  • 在线手机动画网站模板下载安装平台网站建设ppt模板下载
  • 西充企业网站建设局门户网站建设的目标
  • 实体行业做分销网站有什么好处微信网站html5
  • 西安做网站的公司在哪燕窝网站怎么做
  • 如何用腾讯云建设自己网站wordpress手机登陆不了
  • 社交类网站手机模版做百度推广需要有自己的网站吗
  • 学做网站初入门教程网站建设意味着什么
  • 全国网站建设公司排名律师网站模版
  • 温州做网站价格网站开发常用形状
  • 桂林做网站的公司有哪些wordpress情侣家园
  • 如何做翻唱网站app ui设计欣赏 网站
  • asp企业营销型网站建设学校网站建设调查表
  • 关于集团网站建设的修改请示wordpress不同页面布局
  • 免费文档模板网站wordpress搬家502
  • 网站维护费用怎么收百度网盘电脑版下载
  • 小型电商网站模板wordpress 断点调试
  • 做购物网站怎拼找商家网站下载服务器配置
  • 做淘宝客新增网站推广商城网站验收