func (a *AVLTree) Delete(key string) error {
	a.lock.Lock()
	defer a.lock.Unlock()
	var err error
	a.root, err = a.root.delete(key)
	return err
}
Delete removes a key value pair from the AVL tree
package avltree
import (
	"sync"
)
type AVLTree struct {
	lock sync.RWMutex
	root *node
}
type Item struct {
	Key string
	Val interface{}
}
func (a *AVLTree) Upsert(key string, value interface{}) {
	a.lock.Lock()
	defer a.lock.Unlock()
	a.root = a.root.upsert(key, value)
	return
}
func (a *AVLTree) Lookup(key string) (interface{}, error) {
	a.lock.RLock()
	defer a.lock.RUnlock()
	return a.root.lookup(key)
}