nyoj202_红黑树_中序遍历
红黑树
- 描述
-
什么是红黑树呢?顾名思义,跟枣树类似,红黑树是一种叶子是黑色果子是红色的树。。。
当然,这个是我说的。。。
《算法导论》上可不是这么说的:
如果一个二叉查找树满足下面的红黑性质,那么则为一个红黑树。
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 <iostream>
#include <cstdio>
#include <cstring> using namespace std; typedef struct node{
int left;
int right;
};
struct node t[]; void inorder(int x){
if(x!=-){
inorder(t[x].left);
printf("%d\n",x);
inorder(t[x].right);
}
} int main()
{
int tt;
int a,b,c;
scanf("%d",&tt);
while(tt--){
int n;
memset(t,-,sizeof(t));
scanf("%d",&n);
while(n--){ scanf("%d %d %d",&a,&b,&c);
t[a].left=b;
t[a].right=c;
}
scanf("%d",&a);
while(a--){
scanf("%d %d",&b,&c);
}
inorder();
printf("\n");
}
return ;
}
nyoj202_红黑树_中序遍历的更多相关文章
- nyist 202 红黑树(二叉树中序遍历)
旋转对中序遍历没有影响,直接中序输出即可. #include <iostream> #include <cstdio> using namespace std; int n; ...
- [leetcode]_根据二叉树的先序遍历(后序遍历) + 中序遍历 重建二叉树
题目1:Construct Binary Tree from Preorder and Inorder Traversal 给定一棵二叉树的先序遍历和中序遍历,求重建二叉树. 思路: 1.先序遍历的第 ...
- 二叉树 排序二叉树-可以通过中序遍历得到排序的数据 二叉排序树时间复杂度O(logn),
二叉树是一种非常重要的数据结构,它同时具有数组和链表各自的特点:它可以像数组一样快速查找,也可以像链表一样快速添加.但是他也有自己的缺点:删除操作复杂. 虽然二叉排序树的最坏效率是O(n),但它支持动 ...
- [Swift]LeetCode94. 二叉树的中序遍历 | Binary Tree Inorder Traversal
Given a binary tree, return the inorder traversal of its nodes' values. Example: Input: [1,null,2,3] ...
- [Swift]LeetCode105. 从前序与中序遍历序列构造二叉树 | Construct Binary Tree from Preorder and Inorder Traversal
Given preorder and inorder traversal of a tree, construct the binary tree. Note:You may assume that ...
- [LeetCode] Construct Binary Tree from Preorder and Inorder Traversal 由先序和中序遍历建立二叉树
Given preorder and inorder traversal of a tree, construct the binary tree. Note:You may assume that ...
- [LeetCode] Binary Tree Inorder Traversal 二叉树的中序遍历
Given a binary tree, return the inorder traversal of its nodes' values. For example:Given binary tre ...
- DS实验题 Order 已知父节点和中序遍历求前、后序
题目: 思路: 这题是比较典型的树的遍历问题,思路就是将中序遍历作为位置的判断依据,假设有个节点A和它的父亲Afa,那么如果A和Afa的顺序在中序遍历中是先A后Afa,则A是Afa的左儿子,否则是右儿 ...
- YTU 2346: 中序遍历二叉树
原文链接:https://www.dreamwings.cn/ytu2346/2606.html 2346: 中序遍历二叉树 时间限制: 1 Sec 内存限制: 128 MB 提交: 12 解决: ...
随机推荐
- shell编程中的select用法
select 语句 select表达式是bash的一种扩展应用,擅长于交互式场合.用户可以从一组不同的值中进行选择: select var in ... ; do break; done .... n ...
- Tomcat 部署详解
前篇大概讲过了tomcat的发布和部署,以及测试. 本篇详细介绍下tomcat的部署相关的内容,本篇主要内容: 1 介绍下部署相关的内容,需要安装的文件以及上下文描述符 2 静态部署——在tomcat ...
- NLPIR_Init文本分词-总是初始化失败,false,Init ICTCLAS failed!
前段时间用这个分词用的好好的,突然间就总是初始化失败了: 网上搜了很多,但是不是我想要的答案,最终去了官网看了下:官网链接 发现哇,版本更新了啊,下载页面链接 麻利的下载好了最新的文档,一看压缩包名字 ...
- Java-开启Java之路
.NET还是我的最爱··· 准备学习下底层知识,为Java打打基础, 然后开始正式学习Java, 也算是曲线救国了, Go,Go,Go ... 二〇一六年十一月十日 18:09:54
- ASP.NET Core -- 安装版
首先安装的→Visual Studio Community 原文地址 本来觉得安装了vs 就可以了,,结果一直报错,,,太天真... 接下来还要安装 →NuGet.Tools.vsix →DotNet ...
- JVM执行引擎总结(读《深入理解JVM》) 早期编译优化 DCE for java
execution engine: 运行时栈current stack frame主要保存了 local variable table, operand stack, dynamic linking, ...
- CSS 有关margin padding
- iOS: 如何正确的绘制1像素的线
iOS 绘制1像素的线 一.Point Vs Pixel iOS中当我们使用Quartz,UIKit,CoreAnimation等框架时,所有的坐标系统采用Point来衡量.系统在实际渲染到设置时会帮 ...
- Ubuntu 开机进入命令行模式
1.修改配置 sudo vim /etc/default/grub 把 GRUB_CMDLINE_LINUX_DEFAULT="quiet splash" 改为 GRUB_CMDL ...
- ios 微博登录 21338错误 sso package or sign error
os中,是你项目的bundle id 和 连接的微博开发账户里面的bundle id 不一致造成的. 特别是,你把你注册的appKey放到你下载的官方的demo里面测试,肯定会出现这种情况, 所以,你 ...