Golang实现AVL树
来源:互联网 发布:心算除法的快速计算法 编辑:程序博客网 时间:2024/06/07 18:51
参考文章
通过golang实现AVL树,“参考文章”里面十分详细,这里根据C#版提供了Golang版
package mainimport "fmt"type Node AVLNodetype AVLTree *AVLNodetype AVLNode struct { key int height int left AVLTree right AVLTree}func height(p AVLTree) int { if p == nil { return -1 } else { return p.height }}func max(a, b int) int { if a > b { return a } else { return b }}func rotateLeftLeft(node AVLTree) AVLTree { top := node.left node.left = top.right top.right = node node.height = max(height(node.left), height(node.right)) + 1 top.height = max(height(top.left), node.height) + 1 return top}func rotateRightRight(node AVLTree) AVLTree { top := node.right node.right = top.left top.left = node node.height = max(height(node.left), height(node.right)) + 1 top.height = max(node.height, height(top.right)) + 1 return top}func rotateLeftRight(node AVLTree) AVLTree { node.left = rotateLeftLeft(node.left) return rotateLeftLeft(node)}func rotateRightLeft(node AVLTree) AVLTree { node.right = rotateRightRight(node) return rotateLeftLeft(node)}func Insert(tree AVLTree, key int) AVLTree { if tree == nil { tree = new(AVLNode) tree.key = key tree.height = 0 tree.left = nil tree.right = nil } else if key < tree.key { tree.left = Insert(tree.left, key) if height(tree.left) - height(tree.right) == 2 { if key < tree.left.key { tree = rotateLeftLeft(tree) } else { tree = rotateLeftRight(tree) } } } else if key > tree.key { tree.right = Insert(tree.right, key) if height(tree.right) - height(tree.left) == 2 { if key > tree.right.key { tree = rotateRightRight(tree) } else { tree = rotateRightLeft(tree) } } } tree.height = max(height(tree.left), height(tree.right)) + 1 return tree}func findMid(tree AVLTree) { if tree != nil { findMid(tree.left) fmt.Println(tree.key) findMid(tree.right) }}func main() { data := []int{3, 5, 1, 7, 9, 2, 6, 0, 8, 4, 10} var tree AVLTree = nil for _, value := range data { tree = Insert(tree, value) } findMid(tree) fmt.Println()}
0 0
- avl树 golang实现
- Golang实现AVL树
- AVL树的实现
- AVL平衡树实现
- AVL树的实现
- AVL树递归实现
- AVL平衡树实现
- AVL树 实现代码
- AVL树的实现
- AVL树实现代码
- AVL 树的实现
- AVL树及其实现
- AVL树C实现
- AVL 树实现
- AVL树的实现
- AVL树 实现代码!
- AVL树实现
- AVL树实现
- 《Android软件安全与逆向分析》 signapk.jar签名apk工具--【整理学习分享,一部到位!】
- HDU 5335 Walk Out BFS + 贪心 2015 Multi-University Training Contest 4 1009
- 《Friends Season 04, Episode 02》---笔记
- HDU 1394 Minimum Inversion Number (树状数组求逆序数)
- [HDU 1067] Gap BFS+哈希
- Golang实现AVL树
- 包含的结构的结构,2种方法实现
- 数据结构(一)---线性表
- C++ 头文件相互包含的问题
- Can you solve this equation?
- [Windows操作系统] DOS 批处理 修改xml文件
- ireport jasperreport 主报表向子报表传递参数
- H - Overturned Numbers-坑爹水题
- Myeclipse中hibernate开发