没想到,Go实现排序二叉树如此简单!

简介: 没想到,Go实现排序二叉树如此简单!

1、概述

排序二叉树,也称为二叉搜索树,是一种经典的数据结构。

它不仅是一种二叉树,还满足左子树的所有节点值小于根节点,右子树的所有节点值大于根节点的条件。

这个特性使得排序二叉树具有高效的搜索、插入和删除操作。


2、排序二叉树的基本概念

排序二叉树(Binary Search Tree,BST)是一种二叉树,它的每个节点包含一个键值,

同时满足左子树的所有节点值小于该节点的值,右子树的所有节点值大于该节点的值。

这个特性使得 BST 具有快速的搜索、插入和删除操作。

3、排序二叉树的实现

在 Go 语言中,可以通过递归方式实现排序二叉树的插入和搜索操作。

以下是一个排序二叉树的 Go 语言实现示例

package main
import (
  "fmt"
)
type Node struct {
  key   int
  left  *Node
  right *Node
}
type BinarySearchTree struct {
  root *Node
}
func (t *BinarySearchTree) insert(key int) {
  t.root = insertNode(t.root, key)
}
func insertNode(root *Node, key int) *Node {
  if root == nil {
    return &Node{key: key, left: nil, right: nil}
  }
  if key < root.key {
    root.left = insertNode(root.left, key)
  } else if key > root.key {
    root.right = insertNode(root.right, key)
  }
  return root
}
func (t *BinarySearchTree) search(key int) bool {
  return searchNode(t.root, key)
}
func searchNode(root *Node, key int) bool {
  if root == nil {
    return false
  }
  if key == root.key {
    return true
  } else if key < root.key {
    return searchNode(root.left, key)
  } else {
    return searchNode(root.right, key)
  }
}
func main() {
  tree := &BinarySearchTree{}
  tree.insert(8)
  tree.insert(3)
  tree.insert(10)
  tree.insert(1)
  tree.insert(6)
  tree.insert(14)
  tree.insert(4)
  tree.insert(7)
  tree.insert(13)
  searchKey := 6
  if tree.search(searchKey) {
    fmt.Println("找到了关键字", searchKey)
  } else {
    fmt.Println("未找到关键字", searchKey)
  }
}

主要结构体和方法

  • Node 结构体定义了排序二叉树的节点,包含键值、左右子节点的指针。
  • BinarySearchTree 结构体定义了排序二叉树,包含根节点的指针。
  • insert 方法用于插入节点到排序二叉树中,递归地在左右子树中查找合适的位置。
  • search 方法用于在排序二叉树中搜索指定的键值。

4、排序二叉树的应用

排序二叉树常用于需要频繁搜索、插入和删除操作的场景,比如电话簿、字典等。

由于其高效的搜索性能,使得排序二叉树在实际应用中广泛被使用。

func (t *BinarySearchTree) inOrderTraversal() {
  inOrder(t.root)
}
func inOrder(node *Node) {
  if node != nil {
    inOrder(node.left)
    fmt.Print(node.key, " ")
    inOrder(node.right)
  }
}
func main() {
  // ...(在main函数中已经创建了排序二叉树,省略相关代码)
  fmt.Print("中序遍历结果:")
  tree.inOrderTraversal() // 输出: 1 3 4 6 7 8 10 13 14
}

主要方法

  • inOrderTraversal 方法用于中序遍历排序二叉树,实现了对树的升序遍历。

通过本文,详细介绍了排序二叉树的基本概念、实现方法以及应用场景。

希望通过这些示例代码,你能更好地理解排序二叉树这种高效的数据结构,在实际应用中灵活运用。


目录
相关文章
|
3月前
|
Go
go map进行有序的排序
go map进行有序的排序
25 0
|
11月前
|
搜索推荐 算法 Go
对Go的切片进行随机排序
使用math/rand包和sort包来对切片进行随机排序
128 0
|
3月前
|
编译器 Go
go语言的sort库的使用(go语言如何进行排序)
go语言的sort库的使用(go语言如何进行排序)
38 0
|
10月前
|
搜索推荐 算法 Go
Go语言排序黑魔法大公开:自定义排序新姿势!
Go语言排序黑魔法大公开:自定义排序新姿势!
86 0
|
Go
go map进行有序的排序
go map进行有序的排序
97 0
|
Go
一文掌握使用 Go 标准库 sort 对切片进行排序
本文介绍了如何使用 sort 包里的函数,对基本数据类型的切片进行排序。sort 包还提供了对自定义的集合进行排序,需要实现 Interface 接口,由使用者去自定义排序规则,通过 sort.Sort 函数进行排序。
139 1
一文掌握使用 Go 标准库 sort 对切片进行排序
|
Go
Go 通过结构体指定字段进行排序
Go 通过结构体指定字段进行排序
380 0
Go 通过结构体指定字段进行排序
|
Go
go 切片排序以及转为带间隔符的字符串
go 切片排序以及转为带间隔符的字符串
115 0
|
JSON 安全 程序员
GoFrame的gmap相比Go原生的map,天然支持排序和有序遍历
这篇文章就是给初学的小伙伴们答疑解惑的,会为大家介绍: 为什么Go语言中的map是无序的,如何自定义实现map的排序?
187 0
GoFrame的gmap相比Go原生的map,天然支持排序和有序遍历