沒想到 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 方法用於中序遍歷排序二叉樹,實現了對樹的升序遍歷。

通過本文,詳細介紹了排序二叉樹的基本概念、實現方法以及應用場景。

希望通過這些示例代碼,你能更好地理解排序二叉樹這種高效的數據結構,在實際應用中靈活運用。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/FDSWF2N_6NnQz5M_D2BmmQ