二叉排序树又叫二叉搜索树,二叉查找树
主要在删除时:分两种情况:
1、如果被删除结点只有一个子结点,就直接将A的子结点连至A的父结点上,并将A删除
2、如果被删除结点有两个子结点,将该结点右子数内的最小结点取代A。
代码:
package main
import "fmt"
type BST struct {
left *BST
value int
right *BST
}
//查找元素
func (t *BST) Search(value int) bool {
if t == nil {
return false
}
compare := value - t.value
if compare < 0 {
return t.left.Search(value)
}else if compare > 0 {
return t.right.Search(value)
}else {
return true
}
}
//添加元素
func (t *BST) Insert(value int) *BST {
if t ==nil {
newNode := BST{nil,value,nil}
return &newNode
}
if value < t.value {
t.left = t.left.Insert(value)
}else{
t.right = t.right.Insert(value)
}
return t
}
/*删除元素
*1、如果被删除结点只有一个子结点,就直接将A的子结点连至A的父结点上,并将A删除
*2、如果被删除结点有两个子结点,将该结点右子数内的最小结点取代A。
*/
func (t *BST) Delete(value int) *BST {
if t =&#