I was just going over the AA tree code, the deletion code in the aat_remove function writes
node = aat_skew(node);
node = aat_skew(node->right);
node = aat_skew(node->right->right);
node = aat_split(node);
node = aat_split(node->right);
This is different from the original AA tree paper.
Shouldn't it be more like this? This will be in line with what Arne Andersson published, assuming I understood it right
node = aat_skew(node);
node->right = aat_skew(node->right);
node->right->right = aat_skew(node->right->right);
node = aat_split(node);
node->right = aat_split(node->right);