孤独的猫

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

红黑树的实现 Java 代码 (一)

(2005-11-06 16:32:44)
   
我被Sina烦死了,刚才写的全挂了。
这几天一直在忙这个作业,好不容易在今天写完了,鉴于辛苦的历程,网上基本没有什么有参考价值的东西,而国外的网站上基本是Applet,也不是我想要的,关于这个算法的思想教课书里面都有,我这是只是对其用java实现。希望对您有参考价值。
以下是要写得文章结构:
======算法的说明文档摘录======
======算法的Java实现======
    ====红黑树的结点类====
    ====红黑树操作的实现,插入、删除、查找====
    ====对1-300000个整数随机放到数组中,为测试做准备====
    ====对红黑树的测试====

======算法的说明文档摘录======

一、开发环境

开发语言:Java

开发工具:Eclipse3.2M

OS:Windows2003 Enterprise

硬件支持:cpu:PⅢ 1G;memory:384M

 

二、算法思想

该算法主要实现二叉搜索树与红黑树的建立、插入、查找、删除等基本操作。另外在算法中,对1到300000个整数随机划排列作为对两种树的输入,检查二者的性能比较,同时可以按一定的格式先根遍历输出。在此有一点说明的是在数组中随机排列1-300000个数的算法的思想,任意取一1-300000的随机数作为一个位子,判断其前一个数和后一个数及其本身的位置是否是空,如空,插入即可,其时间复杂度是O(n)。在源代码的文件夹中,tree和rbtree分别时二叉树和红黑树得源文件目录,二者比较的类为CompareTree,是可以运行的,而在每个包下面都有一个main类,均可以运行,按照下图运行即可。下面对各个主要函数作简要的说明,具体关于算法的思想只需参考各类教科书即可。

类Tree:                              关于二叉树的操作的类

private void preOrder(Node)            树的先根遍历输出

private Node getSuccessor(Node)        查找树的中序后继

public Node search(int)                搜索树中的一个节点

public void insert(int)                插入一个节点

public boolean delete(int)             删除一个节点

类Rbtree:                            关于红黑树操作的类

private static void initNil()          初始化NIL的叶节点

private void preOrder(Node)            树的先根遍历输出

private void insert(Node)              插入一个节点

private void rbInsertAdjust(Node)      插入后调整位置与颜色,有三种情况

private void leftRotate(Node)          树的左旋,调成颜色

private void rightRotate(Node)         树的右旋,调整颜色

private Node getSuccessor(Node)        查找树的中序后继

private Node rbDelete(Node)            删除一个节点

private void rbDeleteAdjust(Node)      调整删除节点后的树,有四种情况

public Node search(int)                查找一个节点

类RandomNum:                         关于随机生成序列的类

void setRandom( )                      生成数组,其中1-300000随机排列


====红黑树的结点类====
/*
 * @(#)Node.java
 *
 * Title: This class is to define the node of RBtree.
 * Description: This file is the assignment of Algorithms.
 * @copyright (c) OpenSource
 * @author Bobby Yang
 * @tester Bobby Yang
 * @version 1.00
 * @time 2005.11.02
 */


package rbtree;

public class Node {
    int iData;                // data used as key value
    Node parent;              // this node's parent
    Node leftChild;           // this node's left child
    Node rightChild;          // this node's right child
    boolean color;            // the false is red and the true is black;
   

    public void displayNode(){
        //You can define by yourself
    }
   
    public void setNode(int i){
        this.iData = i;
    }
   
    public int getKey(){
        return this.iData;
    }
   
    public String getColor(){
        if(this.color == true) return "B";
        else return "R";
    }

}

posted on 2012-05-12 21:01  孤独的猫  阅读(608)  评论(1编辑  收藏  举报