NYOJ 220 (红黑树--模拟)

链接:click here

题意:题目其实很简单,绕一大圈,原来就是叫你输出输出中序遍历,Orz~~~红黑树经过旋转后中序遍历其实是不变的,所以与下面的旋转没有关系~~--- _ --.

思路:直接数组模拟,或用结构体:包含(数据域,左子树,右子树)

代码:

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <vector>
#include <algorithm>
using namespace std;
const int maxn=20;
const int inf =0x3f3f3f3f;
int N,F,D;
int leftt[maxn],rightt[maxn];
struct node
{
    int data;
    int leftchild,rightchild;
} tree[maxn];
void inorder(int key)
{
    if(key!=-1)
    {
        inorder(tree[key].leftchild);
        printf("%d\n",tree[key].data);
        inorder(tree[key].rightchild);
    }
}
int main()
{
    int T,root,ld,rd;
    scanf("%d",&T);
    while(T--)
    {
        int n;
        scanf("%d",&n);
        for(int i=0; i<n; i++)
        {
            scanf("%d%d%d",&root,&ld,&rd);
            tree[root].data=root;
            tree[root].leftchild=ld;
            tree[root].rightchild=rd;
            // scanf("%d%d%d",&tree[i].data,&tree[i].leftchild,&tree[i].rightchild);
        }
        int m,ve,mv;
        scanf("%d",&m);
        while(m--)
        {
            scanf("%d%d",&ve,&mv);
        }
        inorder(0);
        printf("\n");
    }
    return 0;
}
时间: 2024-11-08 22:38:42

NYOJ 220 (红黑树--模拟)的相关文章

nyoj 202 红黑树

红黑树 时间限制:3000 ms  |            内存限制:65535 KB 难度:3 描述 什么是红黑树呢?顾名思义,跟枣树类似,红黑树是一种叶子是黑色果子是红色的树... 当然,这个是我说的... <算法导论>上可不是这么说的: 如果一个二叉查找树满足下面的红黑性质,那么则为一个红黑树. 1)每个节点或是红的,或者是黑的. 2)每个叶子节点(NIL)是黑色的 3)如果一个节点是红色的,那么他的两个儿子都是黑的. 4)根节点是黑色的. 5)对于每个节点,从该节点到子孙节点的所有路

PAT (Advanced Level) 1132~1135:1132 模拟 1133模拟(易超时!) 1134图 1135红黑树

1132 Cut Integer(20 分) 题意:将一个含K(K为偶数)个数字的整数Z割分为A和B两部分,若Z能被A*B整除,则输出Yes,否则输出No. 分析:当A*B为0的时候,不能被Z整除,输出No.否则会出现浮点错误. #include<cstdio> #include<cstring> #include<cstdlib> #include<string> #include<algorithm> #include<map>

红黑树的Python实现

想用红黑树,怎么搜都搜不到现成的Python实现.干脆自己写一个. 算法的结构按照Sedgewick的<算法(4th)>一书第三章写成,略有改动. 完整的API实现,也用了一些测试case,暂时没发现问题. 这玩意就是好用,谁用谁知道. 废话不多说直接上代码. #注意事项: 重载RBT.Node.reduce(self,new_val)来实现 append()方法中对已存在主键对应值的自定义合并操作.默认为调用list.extend()方法. 1 #!/usr/bin/env python 2

红黑树入门

红黑树 (参看<算法导论>) 红黑树是一种平衡二叉树,巧妙地利用结点颜色来简化维护平衡的难度.具有如下性质: 1.红黑树上所有结点要么是红色的,要么是黑色的. 2.红黑树的根节点是黑色的. 3.如果一个结点是红色的,那么他的两个子结点必须是黑色的. 4.对于每一个结点,他左子树的黑色结点数量必然等于右子树的黑色结点数量. 5.所有叶子结点必然是黑色的. (一)抛弃原有的NULL,所有指向NULL的指针,改为指向一个与普通结点相同的T.null结点,T.null结点颜色固定为黑色,这样便解决了叶

数据结构之红黑树

红黑树(Red Black Tree) 是一种自平衡二叉查找树 红黑树和AVL树类似,都是在进行插入和删除操作时通过特定操作保持二叉查找树的平衡,从而获得较高的查找性能.它虽然是复杂的,但它的最坏情况运行时间也是非常良好的,并且在实践中是高效的: 它可以在O(log n)时间内做查找,插入和删除,这里的n 是树中元素的数目.(度娘)C++ stl里面的set,map底层就是用红黑树实现的.红黑树具体的插入删除原理请参考<<算法导论>> 维基上面也讲得不错.反正插入过程就是要解决&q

红黑树的插入操作

1 package Tree; 2 3 import org.junit.Test; 4 5 class RedBlackTreeNode { 6 7 int key = 0; 8 RedBlackTreeNode left = null; 9 RedBlackTreeNode right = null; 10 RedBlackTreeNode parent = null; 11 // 色域,0表示黑色,1表示红色 12 int color; 13 14 public RedBlackTreeN

深入理解红黑树

红黑树是平衡树的一种,保证最坏情况下操作时间复杂度为O(lgo(n)).红黑树的应用比较广泛,比如作为C++中STL的set和map的底层数据结构,Java集合中TreeSet和TreeMap的底层数据结构等.学习红黑树,可以把二叉查找树作为参考,这样有助于加深理解.红黑树的操作主要包括节点旋转.插入.删除等操作,下面咱们就一一来看: 1.红黑树性质 每个节点是红色的,或者是黑色的 根节点是黑色的 每个叶节点(nil)是黑色的 如果一个节点是红色的,则它的两个子节点都是黑色的 对每个节点,从该节

数据结构--树--红黑树

R-B Tree简介 R-B Tree,全称是Red-Black Tree,又称为“红黑树”,它一种特殊的二叉查找树.红黑树的每个节点上都有存储位表示节点的颜色,可以是红(Red)或黑(Black). 红黑树的特性:(1)每个节点或者是黑色,或者是红色.(2)根节点是黑色.(3)每个叶子节点(NIL)是黑色. [注意:这里叶子节点,是指为空(NIL或NULL)的叶子节点!](4)如果一个节点是红色的,则它的子节点必须是黑色的.(5)从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点.

红黑树并没有我们想象的那么难(下)

SGI STL map 实现概述 根据上一节的红黑树分析, 结合 sgi stl map 的实现, 看看红黑树的源码是如何实现的. 以下主要以代码的注释为主. sgi stl map 底层实现是 _Rb_tree类, 为了方便管理, _Rb_tree 内置了 _M_header, 用于记录红黑树中的根节点, 最小节点和最大节点. 在插入删除中都会对其进行维护. 找到一副美艳的图片: 我只会展开插入和删除的代码. _Rb_tree 有 insert_unique() 和 insert_equal(