void LeftRotate(Node*& pRoot){ Node* p = pRoot->right; pRoot->right = p->left; p->left = pRoot; pRoot = p; } void RightRotate(Node*& pRoot){ Node* p = pRoot->left; pRoot->left = p->right; p->right = pRoot; pRoot = p; } void Insert(Node*& pRoot, int x){ //Insert if(pRoot == NULL) pRoot = creatNode(x); if(pRoot->key > x) Insert(pRoot->left, x); if(pRoot->key > x) Insert(pRoot->right, x); //Balance x = height(pRoot->left) - height(pRoot->right); if(x >= 2){ if(height(pRoot->left->left) > height(pRoot->left->right)) RightRotate(pRoot); // MCB Trái Trái if(height(pRoot->left->left) < height(pRoot->left->right)){ LeftRotate(pRoot->left); //MCB Trái Phải RightRotate(pRoot); } if(x<=-2){ //MCB