golang 实现二叉搜索树(面向对象,非递归)

二叉搜索树

golang 实现非递归方式的二叉搜索树(OO)。
实现时以index为索引比较,data中记录节点数据。
实现方法:
1. 二叉树中插入节点(Insert);
2. 二叉树中查找节点 (Search);
3. 二叉树中删除节点(Delete) —>需要考虑多种情况: 没有任何子树,只有左或右子树,同时有左子树和右子树

二叉搜索不是平衡树,搜索最坏情况(n),最好情况log(n)

源代码

package main

import (
    "container/list"
    "errors"
    "fmt"
)

var (
    errNotExist       = errors.New("index is not existed")
    errTreeNil        = errors.New("tree is null")
    errTreeIndexExist = errors.New("tree index is existed")
)

type BSTree struct {
    root *Node
}
type Node struct {
    lchild *Node
    rchild *Node
    parent *Node
    index  int
    data   int
}

//查找并返回节点
func (tree *BSTree) Search(index int) (*Node, error) {
    node := tree.root
    for {
        if node == nil {
            return nil, errNotExist
        }
        if index == node.index { //查找到index节点
            return node, nil
        } else if index > node.index {
            node = node.rchild
        } else {
            node = node.lchild
        }
    }
}

func (tree *BSTree) Delete(node *Node) error {
    if node == nil {
        return errNotExist
    }
    
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值