javascript AVL树算法与说明
来源:互联网 发布:网络直播怎么兴起的 编辑:程序博客网 时间:2024/06/16 05:08
AVL树的介绍
AVL树得名于它的发明者 G.M. Adelson-Velsky 和 E.M. Landis,他们在 1962 年的论文 “An algorithm for the organization of information” 中发表了它。AVL树是一种自平衡二叉搜索树,意思是任何一个节点左右两节点的高度之差最多为1。实际应用中,维护这种高度平衡所付出的代价比从中获得的效率收益还大,故而实际的应用不多。windows对进程地址空间的管理用到了AVL树。
ES6散列表完整实现代码:
let AVLTree = (function() { class Node { constructor(key) { this.key = key; this.left = null; this.right = null; } } class AVLTree { constructor() { this.root = null; this.parentNode; this.nodeToBeDeleted; } getRoot() { return this.root; }; heightNode(node) { if(node === null) { return -1; } else { return Math.max(this.heightNode(node.left), this.heightNode(node.right)) + 1; } }; rotationLL(node) { var tmp = node.left; node.left = tmp.right; tmp.right = node; return tmp; }; rotationRR(node) { var tmp = node.right; node.right = tmp.left; tmp.left = node; return tmp; }; rotationLR(node) { node.left = this.rotationRR(node.left); return this.rotationLL(node); }; rotationRL(node) { node.right = this.rotationLL(node.right); return this.rotationRR(node); }; insertNode(node, element) { if(node === null) { node = new Node(element); } else if(element < node.key) { node.left = this.insertNode(node.left, element); if(node.left !== null) { if((this.heightNode(node.left) - this.heightNode(node.right)) > 1) { if(element < node.left.key) { node = this.rotationLL(node); } else { node = this.rotationLR(node); } } } } else if(element > node.key) { node.right = this.insertNode(node.right, element); if(node.right !== null) { if((this.heightNode(node.right) - this.heightNode(node.left)) > 1) { if(element > node.right.key) { node = this.rotationRR(node); } else { node = this.rotationRL(node); } } } } return node; }; insert(element) { this.root = this.insertNode(this.root, element); }; removeNode(node, element) { if(node === null) { return null; } this.parentNode = node; if(element < node.key) { node.left = removeNode(node.left, element); } else { nodeToBeDeleted = node; node.right = removeNode(node.right, element); } if(node === this.parentNode) { if(nodeToBeDeleted !== null && element === nodeToBeDeleted.key) { if(nodeToBeDeleted === this.parentNode) { node = node.left; } else { var tmp = nodeToBeDeleted.key; nodeToBeDeleted.key = parentNode.key; parentNode.key = tmp; node = node.right; } } } else { if(node.left === undefined) node.left = null; if(node.right === undefined) node.right = null; if((this.heightNode(node.left) - this.heightNode(node.right)) === 2) { if(element < node.left.key) { node = this.rotationLR(node); } else { node = this.rotationLL(node); } } if((this.heightNode(node.right) - this.heightNode(node.left)) === 2) { if(element > node.right.key) { node = this.rotationRL(node); } else { node = this.rotationRR(node); } } } return node; }; remove(element) { parentNode = null; nodeToBeDeleted = null; root = this.removeNode(root, element); }; } return AVLTree;})()
用法实例
var avlTree = new AVLTree();avlTree.insert(1);avlTree.insert(2);avlTree.insert(3);avlTree.insert(4);avlTree.insert(5);avlTree.insert(6);avlTree.insert(7);avlTree.insert(14);avlTree.insert(15);avlTree.insert(13);avlTree.insert(12);avlTree.insert(11);avlTree.getRoot();
相关文章
javascript 二叉树(Trees)算法与说明:http://blog.csdn.net/rth362147773/article/details/77996814
javascript 红黑树算法与说明:http://blog.csdn.net/rth362147773/article/details/78014688
阅读全文
0 0
- javascript AVL树算法与说明
- javascript 二叉树(Trees)算法与说明
- 【数据结构与算法基础】AVL树 / AVL Tree
- 数据结构与算法10: 平衡二叉树AVL(AVL Tree)
- javascript 红黑树算法与说明
- [数据结构与算法]AVL树的旋转
- C源码@数据结构与算法->AVL树
- 数据结构与算法简记:AVL树
- 数据结构与算法简记:AVL树
- Java数据结构与算法解析---AVL树
- 【数据结构与算法分析】二叉查找树与AVL树
- AVL树插入算法
- [算法]AVL树
- 算法之AVL树
- javascript 栈(Stacks)算法与说明
- javascript 队列(queue)算法与说明
- javascript 链表(lineked lists)算法与说明
- javascript 字典(dictionary)算法与说明
- nginx(一)基本配置讲解
- JVM调优总结(一)-- 一些概念
- 硬币找零
- eclipse中项目与svn失去关联
- GTest源码剖析(七)——断言
- javascript AVL树算法与说明
- 求第k大数
- git常用操作
- 数组去重
- The Dominator of Strings
- 抽象类 接口 多态
- MYSQL总结
- 索引堆
- 前段成长之路——CSS3基础(二)选择器