二叉搜索树(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语言实现二叉搜索树的基本步骤。




