Advertisement
SetKaung

BST

Feb 18th, 2025
140
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 1.21 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4.     "errors"
  5.  
  6.     "golang.org/x/exp/constraints"
  7. )
  8.  
  9. type node[K constraints.Ordered, V any] struct {
  10.     key   K
  11.     value V
  12.     left  *node[K, V]
  13.     right *node[K, V]
  14. }
  15.  
  16. type BinarySearchTree[K constraints.Ordered, V any] struct {
  17.     root *node[K, V]
  18. }
  19.  
  20. func (n *node[K, V]) insert(key K, value V) {
  21.     if key <= n.key {
  22.         if n.left == nil {
  23.             n.left = &node[K, V]{key, value, nil, nil}
  24.         } else {
  25.             n.left.insert(key, value)
  26.         }
  27.     } else {
  28.         if n.right == nil {
  29.             n.right = &node[K, V]{key, value, nil, nil}
  30.         } else {
  31.             n.right.insert(key, value)
  32.         }
  33.     }
  34.  
  35. }
  36.  
  37. func (b *BinarySearchTree[K, V]) Insert(key K, value V) {
  38.     if b.root == nil {
  39.         b.root = &node[K, V]{key, value, nil, nil}
  40.     } else {
  41.         b.root.insert(key, value)
  42.     }
  43. }
  44.  
  45. func (n *node[K, V]) search(key K) (V, error) {
  46.     if n.key == key {
  47.         return n.value, nil
  48.     }
  49.     var value V
  50.     if key < n.key {
  51.         if n.left == nil {
  52.             return value, errors.New("not found")
  53.         } else {
  54.             return n.left.search(key)
  55.         }
  56.     } else {
  57.         if n.right == nil {
  58.             return value, errors.New("not found")
  59.         } else {
  60.             return n.right.search(key)
  61.         }
  62.     }
  63. }
  64.  
  65. func (B *BinarySearchTree[K, V]) Search(key K) (V, error) {
  66.     return B.root.search(key)
  67. }
  68.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement