二叉搜索树
golang 实现非递归方式的二叉搜索树(OO)。
实现时以index为索引比较,data中记录节点数据。
实现方法:
1. 二叉树中插入节点(Insert);
2. 二叉树中查找节点 (Search);
3. 二叉树中删除节点(Delete) —>需要考虑多种情况: 没有任何子树,只有左或右子树,同时有左子树和右子树;
二叉搜索不是平衡树,搜索最坏情况(n)
,最好情况log(n)
源代码
package main
import (
"container/list"
"errors"
"fmt"
)
var (
errNotExist = errors.New("index is not existed")
errTreeNil = errors.New("tree is null")
errTreeIndexExist = errors.New("tree index is existed")
)
type BSTree struct {
root *Node
}
type Node struct {
lchild *Node
rchild *Node
parent *Node
index int
data int
}
//查找并返回节点
func (tree *BSTree) Search(index int) (*Node, error) {
node := tree.root
for {
if node == nil {
return nil, errNotExist
}
if index == node.index { //查找到index节点
return node, nil
} else if index > node.index {
node = node.rchild
} else {
node = node.lchild
}
}
}
func (tree *BSTree) Delete(node *Node) error {
if node == nil {
return errNotExist
}