Guest User

Untitled

a guest
Oct 18th, 2017
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.21 KB | None | 0 0
  1. class Node{
  2. constructor(d){
  3. this.key = d;
  4. this.height = 1
  5. this.left = null
  6. this.right = null
  7. }
  8.  
  9. }
  10.  
  11. class AVLTree{
  12.  
  13. constructor(){
  14. this.root = null
  15. }
  16.  
  17. height(node){
  18. if(node==null)return 0;
  19. return node.height;
  20. }
  21.  
  22. rightRotate(y){
  23. let x = y.left
  24. let T2 = x.right
  25. //rotation
  26. x.right = y
  27. y.left = T2
  28. //update height
  29. x.height = Math.max(this.height(x.left),this.height(x.right))+1
  30. y.height = Math.max(this.height(y.left),this.height(y.right))+1
  31.  
  32. return x;
  33.  
  34. }
  35.  
  36. leftRotate(x){
  37. let y = x.right
  38. let T2 = y.left
  39. //rotation
  40. y.left = x
  41. x.right = T2
  42. //update height
  43. x.height = Math.max(this.height(x.left),this.height(x.right))+1
  44. y.height = Math.max(this.height(y.left),this.height(y.right))+1
  45.  
  46. return y;
  47. }
  48. getBalance(N){
  49. if(N==null)return 0;
  50. return this.height(N.left) - this.height(N.right);
  51. }
  52.  
  53. insert(node,key){
  54. if(node==null) return new Node(key);
  55.  
  56. if(key<node.key){
  57. node.left = this.insert(node.left,key);
  58. }else if(key>node.key){
  59. node.right = this.insert(node.right,key);
  60. }else return node;
  61.  
  62. node.height = 1 + Math.max(this.height(node.left),this.height(node.right))
  63.  
  64. let balance = this.getBalance(node)
  65.  
  66. if(balance > 1 && key<node.left.key){
  67. return this.rightRotate(node);
  68. }
  69. if(balance > 1 && key>node.left.key){
  70. node.left = this.leftRotate(node.left)
  71. return this.rightRotate(node);
  72. }
  73. if(balance < -1 && key>node.right.key){
  74. return this.leftRotate(node);
  75. }
  76. if(balance < -1 && key<node.right.key){
  77. node.right = this.rightRotate(node.right);
  78. return this.leftRotate(node)
  79. }
  80. return node
  81. }
  82. }
  83.  
  84. let tree = new AVLTree()
  85. tree.root = tree.insert(tree.root, 10);
  86. tree.root = tree.insert(tree.root, 20);
  87. tree.root = tree.insert(tree.root, 30);
  88. tree.root = tree.insert(tree.root, 40);
  89. tree.root = tree.insert(tree.root, 50);
  90. tree.root = tree.insert(tree.root, 25);
  91.  
  92.  
  93.  
  94. console.log(tree)
Add Comment
Please, Sign In to add comment