11package com .thealgorithms .tree .AVLtree ;
22
33class Node {
4- int key , height ;
5- Node left , right ;
4+ int key ;
5+ int height ;
6+ Node left ;
7+ Node right ;
68
79 Node (int d ) {
810 key = d ;
@@ -14,59 +16,85 @@ public class AVLInsert {
1416
1517 Node root ;
1618
17- int height (Node n ) {
18- return n == null ? 0 : n .height ;
19+ int height (Node node ) {
20+ if (node == null ) {
21+ return 0 ;
22+ }
23+ return node .height ;
1924 }
2025
21- int getBalance (Node n ) {
22- return n == null ? 0 : height (n .left ) - height (n .right );
26+ int getBalance (Node node ) {
27+ if (node == null ) {
28+ return 0 ;
29+ }
30+ return height (node .left ) - height (node .right );
2331 }
2432
2533 Node rightRotate (Node y ) {
2634 Node x = y .left ;
27- Node T2 = x .right ;
35+ Node t2 = x .right ;
36+
37+ // Perform rotation
2838 x .right = y ;
29- y .left = T2 ;
39+ y .left = t2 ;
40+
41+ // Update heights
3042 y .height = Math .max (height (y .left ), height (y .right )) + 1 ;
3143 x .height = Math .max (height (x .left ), height (x .right )) + 1 ;
44+
45+ // Return new root
3246 return x ;
3347 }
3448
3549 Node leftRotate (Node x ) {
3650 Node y = x .right ;
37- Node T2 = y .left ;
51+ Node t2 = y .left ;
52+
53+ // Perform rotation
3854 y .left = x ;
39- x .right = T2 ;
55+ x .right = t2 ;
56+
57+ // Update heights
4058 x .height = Math .max (height (x .left ), height (x .right )) + 1 ;
4159 y .height = Math .max (height (y .left ), height (y .right )) + 1 ;
60+
61+ // Return new root
4262 return y ;
4363 }
4464
4565 Node insert (Node node , int key ) {
46- if (node == null )
66+ if (node == null ) {
4767 return new Node (key );
68+ }
4869
49- if (key < node .key )
70+ if (key < node .key ) {
5071 node .left = insert (node .left , key );
51- else if (key > node .key )
72+ } else if (key > node .key ) {
5273 node .right = insert (node .right , key );
53- else
54- return node ;
74+ } else {
75+ return node ; // Duplicate keys not allowed
76+ }
5577
5678 node .height = 1 + Math .max (height (node .left ), height (node .right ));
5779 int balance = getBalance (node );
5880
59- if (balance > 1 && key < node .left .key )
81+ // Left Left Case
82+ if (balance > 1 && key < node .left .key ) {
6083 return rightRotate (node );
84+ }
6185
62- if (balance < -1 && key > node .right .key )
86+ // Right Right Case
87+ if (balance < -1 && key > node .right .key ) {
6388 return leftRotate (node );
89+ }
6490
91+ // Left Right Case
6592 if (balance > 1 && key > node .left .key ) {
6693 node .left = leftRotate (node .left );
6794 return rightRotate (node );
6895 }
6996
97+ // Right Left Case
7098 if (balance < -1 && key < node .right .key ) {
7199 node .right = rightRotate (node .right );
72100 return leftRotate (node );
@@ -93,7 +121,7 @@ public static void main(String[] args) {
93121 tree .root = tree .insert (tree .root , 50 );
94122 tree .root = tree .insert (tree .root , 25 );
95123
96- System .out .println ("Preorder traversal of AVL tree:" );
124+ System .out .println ("Preorder traversal of constructed tree is :" );
97125 tree .preOrder (tree .root );
98126 }
99127}
0 commit comments