#include #include typedef double item; typedef struct node_s { struct node_s *left, *right; item val; } node; node *new_node(item it) { node *ret = (node *)malloc(sizeof (node)); ret->left = ret->right = NULL; ret->val = it; return ret; } node *rotateRight(node* head) { node *temp = head->left; head->left = temp->right; temp->right = head; return temp; } node *rotateLeft(node* head) { node *temp = head->right; head->right = temp->left; temp->left = head; return temp; } node * insert(node* head, item x) { if (head == NULL) { head = new_node(x); return head; } if (x < head->val) { head->left = insert(head->left, x); return rotateRight(head); } else { head->right = insert(head->right, x); return rotateLeft(head); } } void print(node const *head, int lev) { if (head->right != NULL) print(head->right, lev+1); for (int i = 0; i < lev; i++) { printf(" "); } printf("%.2f\n", head->val); if (head->left != NULL) print(head->left, lev+1); } int main() { node *head = NULL; head = insert(head,2); head = insert(head, 1); head = insert(head, 3); print(head, 0); }