红黑树之Golang代码简释

写在前面:
一,本文侧重诠释对算法的思考记录过程,忽略其他诸如代码简洁、字符编码等细节问题。
二,本文结合 红黑树插入过程图示 这篇一起看,有助于理解。

package main

import "fmt"

type Node struct {
   
	Data   int
	Left   *Node
	Right  *Node
	Color  int
	Parent *Node
}

//红黑树(Red-Black Tree)是每个节点都带有颜色属性的二叉排序(查找)树,具备以下特性:
//1,节点是红色或黑色
//2,根节点是黑色的
//3,每个叶子节点都是黑色的空节点(NIL),也就是说,叶子节点不存储数据
//4,任何相邻的节点都不能同时为红色,也就是说,红色节点是被黑色节点隔开的
//5,每个节点,从该节点到达其可达叶子节点的所有路径,都包含相同数目的黑色节点
type RbTree struct {
   
	Tree *Node
}

const (
	RED   = 1
	BLACK = 0
)

//中序遍历
func (t *RbTree) MidOrderTraverse(tree *Node) {
   
	if tree == nil {
   
		return
	}

	if tree.Left != nil {
   
		t.MidOrderTraverse(tree.Left)
	}

	fmt.Println(tree)

	if tree.Right != nil {
   
		t.MidOrderTraverse(tree.Right)
	}
}

//插入节点
func (t *RbTree) Insert(data int) {
   
	//如果是空树,就插入到根节点
	if t.Tree == nil {
   
		t.Tree = &Node{
   Data: data}
		return
	}

	tree := t.Tree
	for tree != nil {
   
		if data < tree.Data {
   
			if tree.Left == nil {
   
				tree.Left = &Node{
   Data: data, Color: RED, Parent: tree}
				t.ChangeColor(tree.Left)
				return
			}
			tree = tree.Left
		
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值