ZBLOG

golang 实现二叉搜索树

二叉搜索树(Binary Search Tree,简称BST)是一种常见的数据结构,它具有以下特点:

  • 每个节点最多有两个子节点。
  • 左子树中所有节点的值小于该节点的值。
  • 右子树中所有节点的值大于该节点的值。

在这里,我们将使用Go语言实现一个简单的二叉搜索树。

首先,定义一个节点类型:

type bstNode struct {
    value int
    left  *bstNode
    right *bstNode
}

每个节点包含一个整数值和指向其左、右子节点的指针。

接下来,我们可以创建一个BST结构体,并添加Insert和Search方法:

type BST struct {
    root *bstNode
}

func NewBST() *BST {
    return &BST{nil}
}

func (t *BST) Insert(value int) {
    if t.root == nil {
        t.root = &bstNode{value, nil, nil}
        return
    }

    node := t.root

    for node != nil {
        if value < node.value {
            if node.left == nil {
                node.left = &bstNode{value, nil, nil}
                return
            }
            node = node.left
        } else if value > node.value {
            if node.right == nil {
                node.right = &bstNode{value, nil, nil}
                return
            }
            node = node.right
        } else { // value == node.value
            return // already exists in tree.
        }
    }
}

func (t *BST) Search(value int) bool {
    node := t.root

    for node != nil {
        if value < node.value {
            node = node.left
        } else if value > node.value {
            node = node.right
        } else { // value == node.value
            return true // found it!
        }
    }

    return false // didn't find it.
}

Insert方法遍历BST中的节点,并将新值插入到正确的位置。Search方法也遍历BST中的节点,直到找到与要查找的值匹配的节点或发现该值不存在于树中。

现在,我们可以使用NewBST、Insert和Search方法来创建和操作BST:

t := NewBST()

t.Insert(5)
t.Insert(2)
t.Insert(7)

fmt.Println(t.Search(5)) // true
fmt.Println(t.Search(3)) // false

以上就是用Go语言实现二叉搜索树的基本步骤。

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=3970

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?