NYOJ 202 红黑树

红黑树

时间限制:3000 ms | 内存限制:65535 KB
难度:3
描述

什么是红黑树呢?顾名思义,跟枣树类似,红黑树是一种叶子是黑色果子是红色的树。。。

当然,这个是我说的。。。

《算法导论》上可不是这么说的:

如果一个二叉查找树满足下面的红黑性质,那么则为一个红黑树。

1)每个节点或是红的,或者是黑的。

2)每个叶子节点(NIL)是黑色的

3)如果一个节点是红色的,那么他的两个儿子都是黑的。

4)根节点是黑色的。

5)对于每个节点,从该节点到子孙节点的所有路径上包含相同数目的黑色节点。

我们在整个过程中会用到这些性质,当然,为了公平起见,其实即使你不知道这些性质,这个题目也是可以完成的(为什么不早说。。。。)。在红黑树的各种操作中,其核心操作被称为旋转,那么什么是旋转呢,我们来看一个例子:

假设我们这里截取红黑树的一部分,放在左边,通过操作如果可以把他转化为右边的形式,那么我们就称将根为x的子树进行了左旋,反之我们称将根为Y的树进行了右旋:

恰好慢板同学把自己红黑树弄乱了,然后请你帮忙进行修复,他将向你描述他的红黑树(混乱的。。。)。然后告诉他需要用哪种方式旋转某个节点。在你完成工作之后,直接向大黄提交新的树的中序遍历结果就好了。

Hint:

在这里好心的慢板同学给你简单的解释下样例:

最开始的时候树的样子是这样的:

0

/ \

1 2

然后对于标号为0的节点进行右旋,结果将变为:

1

\

0

\

2

然后呢。。。

中序遍历?这个是什么东西,哪个人可以告诉我下。。。。

输入
输入分两部分:
第一部分:一个整数T(1<=T<=10),表示测试的组数。
第二部分:第一行是一个数字N,表示红黑树的节点个数。0<N<10
然后下面有N行,每行三个数字,每个数字的大小都在-1~N-1之间。第一个数字表示当前节点的标号,后面两个数字表示这个节点的左孩子和右孩子。如果是-1的话表示是空节点。对于所有的输入来说标号为0节点为根。
然后是一个数字M表示需要旋转的次数。M<100
接下来M行,每行有两个数字,分别表示你要旋转的节点标号和你需要的操作。标号的范围为0~n-1,如果标号后面的数字0,那么表示为左旋。如果是1,则表示右旋。
输出
每组测试返回N行数字,表示对树的中序遍历。在每组测试数据之后留一行空行。
样例输入
1
3
0 1 2
1 -1 -1
2 -1 -1
1
0 1
样例输出
1
0
2



#include "stdio.h"
#include "string.h"
#define N 10int node[N][2],n;	//表示树的节点,节点一维的下标表示当前节点的标号 ,a[][0]左子树,a[][1]右子树
/*node[节点标号][2] 表示树的节点,缺点是使用时难以控制程序运行中访问不该访问的内存区域例如: node[-1][1] 不过这倒题幸好,没有怎么的操作这些树节点 
*///中序遍历 
void orderTraverse(int index)
{if(index>-1 && index<n){orderTraverse(node[index][0]);printf("%d\n",index);orderTraverse(node[index][1]);	}else return ;		
}int main()
{int count,m;int mark,left,right;	scanf("%d",&count);	//表示测试的组数while(count-->0){		scanf("%d",&n);	//表示红黑树的节点个数	memset(node,-1,sizeof(node));for(int i=0;i<n;i++){scanf("%d%d%d",&mark,&left,&right);if(mark>-1 && mark<n){node[mark][0]=left;  node[mark][1]=right;}			 } 		scanf("%d",&m);	/*对树进行操作*/	/*没有对树进行操作,因为操作和不操作对结果中序遍历没有影响*/for(int operate=-1,i=0;i<m;i++){scanf("%d%d",&mark,&operate);						}		orderTraverse(0);		}	return 0;
}


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

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

相关文章

为对象添加方法mothod

Function.prototype.mothod function( name, fn ) { this.prototype[name] fn ; return this ; };转载于:https://www.cnblogs.com/40dadao/p/5816521.html

python爬虫cookie池 与ip绑定_Python爬虫:设置Cookie解决网站拦截并爬取蚂蚁短租

前言文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。作者&#xff1a; EastmountPS&#xff1a;如有需要Python学习资料的小伙伴可以加点击下方链接自行获取我们在编写Python爬虫时&#xff0c;有时会遇到…

Java Secret:加载和卸载静态字段

总览 首先&#xff0c;很自然地假设静态字段具有特殊的生命周期&#xff0c;并且在应用程序的生命周期中一直存在。 您可以假设它们存在于内存中的特殊位置&#xff0c;例如C或类元信息的perm gen中的内存开始。 但是&#xff0c;得知静态字段驻留在堆上&#xff0c;可以具有任…

HTTP协议详解(真的很经典)

转自&#xff1a;http://blog.csdn.net/gueter/archive/2007/03/08/1524447.aspx Author :Jeffrey 引言 HTTP是一个属于应用层的面向对象的协议&#xff0c;由于其简捷、快速的方式&#xff0c;适用于分布式超媒体信息系统。它于1990年…

NYOJ 63 小猴子下落

小猴子下落 时间限制&#xff1a;3000 ms | 内存限制&#xff1a;65535 KB难度&#xff1a;3描述 有一颗二叉树&#xff0c;最大深度为D,且所有叶子的深度都相同。所有结点从左到右从上到下的编号为1,2,3&#xff0c;&#xff0c;2的D次方减1。在结点1处放一个小猴子&#xff0…

python科学计算与图形渲染_宁哥Python科学计算与图形渲染库课程

50dccd474759c0ffd343efcac14f8ab2.png (259.41 KB, 下载次数: 0)2019-4-9 12:23 上传课程目录章节1: NumPy基础知识课时1NumPy简介14:05课时2搭建NumPy开发环境&#xff0c;验证NumPy开发环境17:08课时3源代码和数据下载章节2: NumPy数组课时4创建多维数组09:20课时5获取单个数…

http协议说明

今天公司有同事让我给他讲一讲http..然后自己写了一个示例代码,这如果都看不懂.那我也没办法了.... 1 <?php2 3 //这里服务器以apache举例.nginx.iis.他们实际上处理方式的都是同理4 //申明http链接的数据包 注意最后面有两个换号.这是告诉apache.数据包的结束,如果后面没…

JBoss模块示例–模块化Web应用程序

最近&#xff0c;我读了为什么没有标准来开发真正的模块化Web应用程序&#xff1f; 由Patroklos Papapetrou撰写&#xff08; 在Java Code Geeks中也有介绍 &#xff09;。 受本文的启发&#xff0c;我决定检查实际使用的JBoss模块 。 这篇文章逐步描述了我的实验。 我首先想到…

由MySql漏洞导致电脑被入侵(特征为新增加名为piress的帐户)

今天开机&#xff0c;突然发现新增了一个名为piress的账户&#xff0c;突然间就意识到我的电脑可能被入侵了。后来发现网上很多人都遇到这样的问题。经过一步步的查证&#xff0c;原来最近MySQL爆出一个安全漏洞&#xff0c;远程登录mysql&#xff0c;尝试225次后就可以绕过身份…

multiprocessing.manager管理的对象需要加锁吗_Go: 内存管理和分配

本文基于Go1.13当不再使用内存时&#xff0c;标准库会自动执行Go的内存管理即从分配到回收。尽管开发者不需要处理它&#xff0c;但是Go的底层管理进行了很好的优化并且充满了有趣的概念。堆上的分配内存管理被设计可以在并发环境快速执行并且集成了gc。让我们从一个例子开始&a…

NYOJ 35表达式求值

表达式求值 时间限制&#xff1a;3000 ms | 内存限制&#xff1a;65535 KB难度&#xff1a;4描述 ACM队的mdd想做一个计算器&#xff0c;但是&#xff0c;他要做的不仅仅是一计算一个AB的计算器&#xff0c;他想实现随便输入一个表达式都能求出它的值的计算器&#xff0c;现在请…

Java EE6 CDI,命名组件和限定符

Java EE6的最大承诺之一就是简化了依赖注入的使用。 他们做到了&#xff0c;使用CDI 。 CDI代表Java EE的上下文和依赖注入&#xff0c;它提供了一个基础集&#xff0c;用于在企业应用程序中应用依赖注入。 在CDI之前&#xff0c;EJB 3还引入了依赖注入&#xff0c;但这有点基础…

c#获取当前目录的一些方法

【内容来源地址】&#xff1a;http://www.cnblogs.com/marcozh/archive/2008/10/19/1314667.html Assembly myAssembly Assembly.GetEntryAssembly(); string path myAssembly.Location; DirectoryInfo dr new DirectoryInfo(path); pathd…

linux里的进程简介

/sbin/init 内核启动的第一个用户级进程,引导用户空间服务 [kthreadd] 内核线程管理[migration/0] 用于进程在不同的CPU间迁移[ksoftirqd/0] 内核调度/管理第0个CPU软中断的守护进程[migration/1] 管理多核心[ksoftirqd/1] 内核调度/管…

python画画bup_Python中的高效Vector / Point类

实现高效的Vector / Point类的最佳方法是什么(甚至更好&#xff1a;是否有一个),可以在Python 2.7和3.x中使用&#xff1f;我找到了the blender-mathutils,但它们似乎只支持Python 3.x.然后是this Vector class,使用numpy,但它只是一个3D矢量.使用具有静态属性(x和y)的像kivy’…

CSDN 编程挑战——《coder的计算器》

coder的计算器 题目详情: coder现在已经上初中&#xff0c;也会用计算器实现 ,-,*,/和幂运算^了&#xff0c;但他觉得市场那些计算器太繁琐了&#xff0c;有很多他不认识的符号&#xff0c;所以他现在很想要能计算带括号的 ,-,*,/和幂运算^的混合表达式就可以了&#xff0c;你…

OpenShift Express:部署Java EE应用程序(支持AS7)

在过去的几年中&#xff0c;我越来越听到有关“云”服务的信息。 最初&#xff0c;我并不是很想尝试一下。 但是几个月后&#xff08;一年&#xff1f;&#xff09;&#xff0c;我决定看看这是怎么回事。 我从事Java EE开发已经超过7年了&#xff0c;所以我决定看看将Java EE应…

07 总结ProgressDialog 异步任务

1,ProgressDialog> //使用对象 设置标题 progressDialog.setTitle("标题"); //设置图标 progressDialog.setIcon(R.drawable.ic_launcher); //设置展示的内容 progressDialog.setMessage(&q…

python函数封装计算n运算_在Python里面怎么可以运算出999999999**999999999,求思路?...

>>> 999999999 * math.log(999999999, 2) / 8 / 1024 ** 33.480509950621777所以这个数字本身就差不多需要3.5GB内存&#xff0c;考虑到计算过程中需要存储临时结果&#xff0c;还需要翻个两三倍吧而Python中的long可以到多少呢&#xff1a;#define MAX_LONG_DIGITS \…

C++中const关键字的使用总结

const是不变的意思&#xff0c;在C程序中&#xff0c;经常用const来限制对一个对象的操作: 1.1 const变量 例如&#xff1a; const int n3; 则这个变量的值不能改变&#xff0c;即不能对变量赋值。 1.2 const参数 出现在函数参数中的const表示在函数体中不能对这个参数做修改…