平衡二叉树模板

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
struct node
{int ndata;             //记录关键字数值node *l,*r;int nheight;           //平衡因子
};
int height(node* p)        //返回树p的深度
{if(p==NULL)return -1;return p->nheight;
}
node* LLRotate(node* p)     //对LL型直接在不平衡结点进行左旋转
{node* p1;p1=p->l;p->l=p1->r;p1->r=p;p->nheight=max(height(p->l),height(p->r))+1;  //结点的位置变了,要更新结点的高度值p1->nheight=max(height(p1->l),p->nheight)+1;return p1;
}
node* RRRotate(node* p)   //对RR型直接在不平衡结点进行右旋转
{node* p1;p1=p->r;p->r=p1->l;p1->l=p;p->nheight=max(height(p->l),height(p->r))+1;p1->nheight=max(height(p1->r),p->nheight)+1;return p1;
}
node* LRRotate(node* p)
{p->l=RRRotate(p->l);   //在不平衡结点p的左儿子处进行右旋转return LLRotate(p);    //在不平衡结点p处进行左旋转并返回新的根
}
node* RLRotate(node* p)
{p->r=LLRotate(p->r);   //在不平衡结点p的右儿子处进行左旋转return RRRotate(p);    //在不平衡结点p处进行左旋转并返回新的根
}
node* _Insert(int s,node* p)
{if(p==NULL)            //待插入的值赋给新开辟的结点{p=new node;p->ndata=s;p->nheight=0;p->l=p->r=NULL;}else if(s<p->ndata)    //若待插入的值小于p的关键字数值,则插入到左子树中{p->l=_Insert(s,p->l);if(height(p->l)-height(p->r)==2)   //该树出现不平衡{if(s<p->l->ndata)      //若待插入的值插到了左儿子的左子树上则单旋转p=LLRotate(p);else                   //反之,双旋转p=LRRotate(p);}}else if(s>p->ndata)     //道理同上{p->r=_Insert(s,p->r);if(height(p->l)-height(p->r)==-2){if(s>p->r->ndata)p=RRRotate(p);elsep=RLRotate(p);}}p->nheight=max(height(p->l),height(p->r))+1;return p;
}
int main()
{int n;while(~scanf("%d",&n)){node *head=NULL;while(n--){int x;scanf("%d",&x);head=_Insert(x,head);}printf("%d\n",head->ndata);}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/510181.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Hbase PageFilter 取出数量不准确问题

PageFilter pf new PageFilter(pageFilterSize); filterList.addFilter(pf); PageFilter&#xff1a;设置获取的数据行数PageFilter作用在region上&#xff0c;只能保证当前region返回相应的数量&#xff0c;也就是说大概可理解为 region数量*pageFilterSize

CV_LOAD_IMAGE_COLOR 和 CV_BGR2RGBA找不到定义

添加下面头文件 #include "opencv2/imgcodecs/legacy/constants_c.h" #include "opencv2/imgproc/types_c.h"

堆排序原理及算法实现(最大堆)

堆排序 堆排序是利用堆的性质进行的一种选择排序。下面先讨论一下堆。 1.堆 堆实际上是一棵完全二叉树&#xff0c;其任何一非叶节点满足性质&#xff1a; Key[i]<key[2i1]&&Key[i]<key[2i2]或者Key[i]>Key[2i1]&&key>key[2i2] 即任何一非叶节点的…

Storm 安装

下载地址&#xff1a;http://storm.apache.org/ 下载完成后解压到相应目录 修改 conf目录下的storm.yaml文件,集群的所有服务器统一配置 #zookeeper地址&#xff0c;默认端口2181 storm.zookeeper.servers:- "test1"- "test2"- "test3"#nimbus…

Failed to connect to 127.0.0.1 port 1080: Connection refused package:git

windows平台&#xff1a; 解决方法&#xff1a; 打开c:/user/***/..gitconfig 删除一下内容&#xff1a; [http "https://github.com"] proxy 127.0.0.1:50647 [https "https://github.com"] proxy 127.0.0.1:50647 proxy 127.0.0.1:506…

Hbase Region in transition (RIT) 异常解决

查看Hbase状态&#xff0c;突然发现出现了RIT&#xff0c;并且很长时间了~ 查看了一些相关RIT介绍 &#xff08;部分介绍和Hbase2.0不同&#xff0c;如&#xff1a;RIT状态信息2.0已不在zookeeper保存&#xff09; https://mp.weixin.qq.com/s?__bizMzU5OTQ1MDEzMA&mid224…

邻接表的构建、DFS、BFS搜索

接着上次的文章“图的构建&#xff08;邻接链表法&#xff09;”&#xff0c;邻接链表法构建图相对来说比较简单&#xff0c;并且遍历起来也相对简单&#xff0c;但是要是动态添加图的节点和图的边&#xff0c;则是实在不方便&#xff0c;不过现在不管那么多&#xff0c;今天的…

Storm性能简单测试

看了很多关于Storm性能的文章&#xff0c;说法不一&#xff0c;自己根据实际业务测一下是否能满足自身要求&#xff08;只做了简单集群和代码调优&#xff09; 场景&#xff1a;kafka消费数据标准化后存储到Hbase中 服务器资源&#xff1a;两台32G内存做Supervisor 使用资源平…

C++之带有默认参数值的构造函数

在一个类中 &#xff0c;如果程序员没有写&#xff0c;任何一个构造函数&#xff0c;则编译器将为该类提供一个默认的构造函数&#xff0c;如果程序员对类的构造函数进行了重载&#xff0c;则编译器将不提供默构造函数&#xff0c;这里需要手动书写一个无参的构造函数&#xff…

Hbase Shell 介绍

目录 Scan 创建表 Count 清空表数据 删除数据 删除表 删除列簇 判断表是否为‘enable’ 插入 Region管理 Scan 查询某个表某个列的数据&#xff1a; scan tableName,{COLUMN>列族&#xff1a;列,LIMIT>需要查看条数} 指定开始Rowkey查询 scan tableName,{STARTRO…

拓扑排序 详解 + 并查集 详解 + 最小生成树详解

若您发现本文有什么错误&#xff0c;请联系我&#xff0c;我会及时改正的&#xff0c;谢谢您的合作&#xff01; 本文为原创文章&#xff0c;转载请注明出处 本文链接 &#xff1a; http://www.cnblogs.com/Yan-C/p/3943940.html 。 哎呀&#xff0c;好久了啊&#xff0c;想…

Hbase 2.0 RegionObserver使用

参考&#xff1a;http://hbase.apache.org/2.0/book.html#cp Hbase2.0 不支持 1.x版本的RegionObserver &#xff0c;查看hbase官网更新说明&#xff0c;自己做了测试并通过 Hbase RegionObserver import java.io.IOException; import java.util.List; import java.util.Opti…

ubuntu 16.0安装ros-kinetic

1.设置sources.list sudo sh -c echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list best: sudo sh -c . /etc/lsb-release && echo "deb http://mirrors.tuna.tsinghua.edu.cn/…

Impala Shell 简单命令

目录 1.更新元数据 2.对查询结果去格式化 3.查询结果存储到文件 4.去格式化后指定分隔符 5.-p或者--show-profiles:显示查询的执行计划(与EXPLAIN语句输出相同)和每个查询语句底层的执行步骤的详细信息. 6.指定主机名连接 (-i) 7.执行查询语句 8.指定脚本文件执行SQL …

gtest测试用例

google tf测试框架代码 https://github.com/google/googletest/tree/2fe3bd994b3189899d93f1d5a881e725e046fdc2 跑单个测试例 ./test --gtest_filterAllTest.t1 跑这个模块的所有测试例 ./test --gtest_filterAllTest*

__stdcall

__stdcall是函数调用约定的一种&#xff0c;函数调用约定主要约束了两件事&#xff1a;1.参数传递顺序2.调用堆栈由谁&#xff08;调用函数或被调用函数&#xff09;清理常见的函数调用约定&#xff1a;stdcall cdecl fastcall thiscall naked call__stdcall表示1.参数从右向左…

CDH邮件预警

转载自&#xff1a;http://blog.51cto.com/feature09/2055835 在CDH的7180页面找到Cloudera Managerment Service 如图所示&#xff1a; 在Configuration中&#xff0c;搜索alert 设置接收信息的邮箱。 设置内容都在图片上&#xff1a; 添加邮件页眉说明&#xff0c;第一行显…

结构光双目视觉测距原理

结构光视觉技术是一种主动投影式的三维测量技术&#xff0c;通过使用投影仪和相机组成的系统来对物体进行三维测量 系统结构&#xff1a; 硬件系统&#xff1a; 常见编码方法&#xff1a; 结构光图案编码 常用的是格雷码和传统的二进制码相比&#xff0c;格雷码的编码数中任意…

c++静态成员函数为什么不能为虚函数?

知乎用户 three passions govern my life2 人赞同可以把静态成员函数看作是“命名空间受限的普通函数”&#xff0c;所以它不能有运行时多态发布于 2015-06-23 添加评论 感谢 分享收藏 • 没有帮助 • 举报 • 作者保留权利Elvis Wang C程序员转型Java中6 人赞同其实我觉得这个…