二叉搜索树的实现(Go描述)

Erin ·
更新时间:2024-09-20
· 793 次阅读

二叉搜索树的结构如下:

// Binary Search Tree type BST struct { // Data interface{} 替换为interface可以支持多种数据类型 Val int Left *BST Right *BST }

实现如下操作:

查找(递归/非递归) 删除 插入 最大值 最小值

代码:

package main // Binary Search Tree type BST struct { // Data interface{} Val int Left *BST Right *BST } // BST插入操作递归操作 func (node *BST) Insert(val int) { if val node.Val { // 查找的值大于当前节点在右子树找 return node.Right.SearchRecursion(key) }else if key key{ tree = tree.Left }else { tree = tree.Right } } } // BST最小值 func (node *BST) Min() int { tree := node for { if tree.Left != nil { tree = tree.Left }else { return tree.Val } } } // BST最大值 func (node *BST) Max() int { tree := node for { if tree.Right != nil { tree = tree.Right }else { return tree.Val } } } // BST删除操作 func (node *BST) Remove(key int) *BST { if node == nil { return nil } // 向左找 if key node.Val { return node.Right.Remove(key) } // 如果该节点没左右子树直接删除 if node.Left == nil && node.Right == nil { node = nil return node } // 有右子树直接用右子树覆盖该节点 if node.Left == nil { node = node.Right return node } // 有左子树直接用左子树覆盖该节点 if node.Right != nil { node = node.Left return node } // 左右子树均存在, 找到右子树的最左节点替换当前节点 mostLeftMode := node.Right for { if mostLeftMode != nil && mostLeftMode.Left != nil { mostLeftMode = mostLeftMode.Left }else { break } } node.Val = mostLeftMode.Val // 删除右子树的最左节点 node.Right = node.Right.Remove(node.Val) return node } func main() { }
作者:ClassmateLin



二叉搜索树 GO

需要 登录 后方可回复, 如果你还没有账号请 注册新账号