github.com/Mericusta/go-stp@v0.6.8/bs.go (about) 1 package stp 2 3 type BSTree[T STPOrdered[T]] struct { 4 r *bstNode[T] 5 } 6 7 func NewBSTree[T STPOrdered[T]](v T) *BSTree[T] { 8 return &BSTree[T]{r: newBSTNode(v)} 9 } 10 11 func (t *BSTree[T]) Set(v T) { 12 if t.r == nil { 13 t.r = newBSTNode(v) 14 return 15 } 16 n := t.r 17 for { 18 if n.v.LT(v) { 19 if n.l == nil { 20 n.l = newBSTNode(v) 21 return 22 } else { 23 n = n.l 24 } 25 } else if n.v.GT(v) { 26 if n.r == nil { 27 n.r = newBSTNode(v) 28 return 29 } else { 30 n = n.r 31 } 32 } else { 33 return 34 } 35 } 36 } 37 38 type bstNode[T any] struct { 39 v T 40 l *bstNode[T] 41 r *bstNode[T] 42 } 43 44 func newBSTNode[T STPOrdered[T]](v T) *bstNode[T] { 45 return &bstNode[T]{v: v} 46 }