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