GO数据结构——红黑树(一.基础操作)

1.简介

R-B Tree,全称是Red-Black Tree,又称为“红黑树”,它一种特殊的二叉查找树。红黑树的每个节点上都有存储位表示节点的颜色,可以是红(Red)或黑(Black)。在开发当中,红黑树的综合效率最高,复杂度也最高。

红黑树的特性: (1)每个节点或者是黑色,或者是红色。(红色代表true,黑色代表false) (2)根节点是黑色。 (3)每个叶子节点(NIL)是黑色。[注意:这里叶子节点,是指为空(NIL或NULL)的叶子节点] (4)如果一个节点是红色的,则它的子节点必须是黑色的。(不能出现连续的红色结点) (5)从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点。

注意: (01) 特性(3)中的叶子节点,是只为空(NIL或null)的节点。 (02) 特性(5),确保没有一条路径会比其他路径长出俩倍。因而,红黑树是相对是接近平衡的二叉树。

GO数据结构——红黑树(一.基础操作)_第1张图片

1.1红黑树应用

红黑树的应用比较广泛,主要是用它来存储有序的数据,它的时间复杂度是O(lgn),效率非常之高。 例如,Java集合中的TreeSet和TreeMap,C++ STL中的set、map,以及Linux虚拟内存的管理,都是通过红黑树去实现的。

2.红黑树基本结构

相比较于AVL树,红黑树多出了父节点,颜色。

//定义红黑常量
const (
   RED=true
   BLACK=false
)
//红黑树结点结构
type RBNode struct {
   Left *RBNode
   Right *RBNode
   Parent *RBNode
   Color bool
   Data interface{}
}
//红黑树结构
type RBTree struct {
   Root *RBNode
   NIL *RBNode
   count int
}

3.红黑树基本操作

//比大小
func Bigger(a,b interface{})bool{
   newA:=a.(int)
   newB:=b.(int)
   return newA>newB
}
//初始化红黑树
func (rbt *RBTree)Init()*RBTree{
   node:=&RBNode{nil,nil,nil,BLACK,nil}
   return &R

你可能感兴趣的:(数据结构,golang)