balance(node) {
    // check uncle
    if (node.uncle && node.uncle.color === RED) {
      // if uncle is RED, change the color of uncle, parent and grandparent to BLACK
      node.parent.color = BLACK;
      node.uncle.color = BLACK;
      node.grandparent.color = BLACK;
    } else if (node.uncle && node.uncle.color === BLACK) {
      // if uncle is BLACK

      // case: Right Right Case

    } else if (node.parent && node.color === RED && node.parent.color === RED) {
      // Solve RED violation doing rotations and re-color
      if (node.isParentLeftChild) {
        this.rightRotation(node.parent);
      } else {
        this.leftRotation(node.parent);
      }
    }
  }
Balance tree by doing rotations

Fix RED/BLACK violations
- RED violation: a RED node has a RED child or root is RED.
- BLACK violation: one path has more BLACK nodes than other.


@param {TreeNode} node