美文网首页
golang 实现红黑树(未完成)

golang 实现红黑树(未完成)

作者: 博林木木 | 来源:发表于2017-01-05 19:03 被阅读0次

未完待续 还差个删除,删除貌似比较难

package main

import "fmt"

type node struct {
    key int
    value int
    left *node
    right *node
    color int
}

type RBST struct {
    head *node
    n int
}

func (this *RBST)put(key,value int){
    if this.head == nil{
        this.head = &node{key:key,value:value,color:1}
        return
    }
    this.head = this.putValue(this.head,key,value)
    return
}

func (this *RBST)rotateLeft(node *node)*node{
    tmp := node.right
    node.right = node.right.left
    tmp.left = node
    tmp.color = 1
    node.color = 2
    return tmp
}

func (this *RBST)rotateRight(node *node)*node{
    tmp := node.left
    node.left = node.left.right
    tmp.right = node
    tmp.color = 1
    node.color = 2
    return tmp
}

func (this *RBST)flipColor(node *node)*node{
    node.left.color = 1
    node.right.color = 1
    node.color = 2
    return node
}

func (this *RBST)get(key int)int{
    return this.getValue(this.head,key)
}

func (this *RBST)getValue(node *node,key int)int{
    if node == nil{
        return 0
    }
    if key > node.key{
        return this.getValue(node.right,key)
    }else if key < node.key{
        return this.getValue(node.left,key)
    }
    return node.value

}

func (this *RBST)putValue(Node *node,key int,value int)*node{

    if Node == nil{
        return &(node{key:key,value:value,color:2})
    }

    if key > Node.key{
        Node.right = this.putValue(Node.right,key,value)

    }else if key < Node.key{
        Node.left =  this.putValue(Node.left,key,value)

    }else{
        Node.value = value
        return Node
    }
    //如果有右红链接  则左转
    if Node.right != nil && Node.right.color == 2 && ( (Node.left != nil && Node.left.color == 1) || Node.left == nil){
        Node = this.rotateLeft(Node)
    }
    //如果有左子子红链接  则右转
    if Node.left != nil && Node.left.left != nil && Node.left.color == 2 && Node.left.left.color == 2{
        Node = this.rotateRight(Node)
    }
    //如果左子红链接  且右子红链接  则 flipcolor
    if Node.right != nil && Node.left != nil && Node.right.color == 2 && Node.left.color == 2{
        Node = this.flipColor(Node)
    }
    return Node
}

func main(){
    var redBlack RBST
    redBlack.put(1,1)
    redBlack.put(2,2)
    redBlack.put(3,3)
    redBlack.put(4,4)
    redBlack.put(5,5)
    redBlack.put(6,6)
    redBlack.put(7,7)
    redBlack.put(8,8)
    redBlack.put(9,9)

    fmt.Println(redBlack.get(9))
}


相关文章

  • 红黑树的原理详解及golang实现

    # 红黑树原理详解及golang实现

  • golang 实现红黑树(未完成)

    未完待续 还差个删除,删除貌似比较难

  • Golang红黑树

    红黑树 红黑树是每个节点都带有颜色属性(红色或黑色)的二叉查找树。红黑树也属于自平衡二叉查找树。 红黑树具有如下性...

  • map字典

    golang的map实现并不是像c++一样使用红黑树,而是使用了hashmap,用数组来实现。 map 是字典的概...

  • STL源码解析(1)-红黑树

    STL源码解析(1)-红黑树 STL容器之红黑树实现 C++中map和set都是基于红黑树的实现, 其迭代器也是红...

  • 拿下红黑树

    红黑树 红黑树、2-3树的简单定义: 实现红黑树的基本结构以及添加操作(维护定义,左旋、右旋、颜色反转) 红黑树与...

  • 树-红黑树和AVL树的区别

    TreeSet与TreeMap的底层实现都是红黑树 1 概念 什么是红黑树? 红黑树(Red Black Tree...

  • 红黑树

    红黑树图Java在实现TreeMap中用到了红黑树,在此记录自己的理解。 定义 红黑树是二叉搜索树的一种实现方式,...

  • 数据结构学习_02红黑树平衡操作

    参考文章 : 红黑树原理解析以及Java实现 红黑树(五)之 Java的实现 废话不多说, 直接开始分析 一、红黑...

  • 24-集合

    一、用链表实现集合 Set类 ListSet类 二、用红黑树实现集合 TreeSet类 用红黑树实现集合(Tree...

网友评论

      本文标题:golang 实现红黑树(未完成)

      本文链接:https://www.haomeiwen.com/subject/igwzvttx.html