1: private BinaryNode<T> rebalance(BinaryNode<T> nodeN)
2: {
3: int heightDifference = getHeightDifference(nodeN);
4:
5: if (heightDifference > 1)
6: {
7: // Left subtree is taller by more than 1,
8: // so addition was in left subtree
9: if (getHeightDifference(nodeN.getLeftChild()) > 0)
10: // Addition was in left subtree of left child
11: nodeN = rotateRight(nodeN);
12: else
13: // Addition was in right subtree of left child
14: nodeN = rotateLeftRight(nodeN);
15: }
16: else if (heightDifference < -1)
17: {
18: // Right subtree is taller by more than 1,
19: // so addition was in right subtree
20: if (getHeightDifference(nodeN.getRightChild()) < 0)
21: // Addition was in right subtree of right child
22: nodeN = rotateLeft(nodeN);
23: else
24: // Addition was in left subtree of right child
25: nodeN = rotateRightLeft(nodeN);
26: } // end if
27: // Else nodeN is balanced
28:
29: return nodeN;
30: } // end rebalance
31: // Version 4.0