Thông tin tài liệu
?? Vi?t ch??ng tr?nh c?i ??t c?y nh? ph?n t?m ki?m c?n b?ng qu?n l? t? ?i?n ti?ng Anh chuy?n ng?nh (ch?n c?c ng?nh: To?n, L?, H?a, Tin, c) v?i c?c thao t?c : a T?o t? ?i?n b T?m ki?m t? t? ?i?n c X?a t? t? ?i?n d C?p nh?t th?ng tin tr?n c?y e In danh s?ch t? l?n m?n h?nh #include #include #include #include using namespace std; #define LH -1 #define EH #define RH struct WORD { string Word; string Meaning; }; struct AVLNode { int BalFactor; WORD Info; AVLNode* pLeft; AVLNode* pRight; }; typedef AVLNode *AVLTree; void CreateAVLTree(AVLTree &T) { T=NULL; } void RightRight(AVLTree &T) { AVLNode* T1 = T->pRight; T->pRight = T1->pLeft; T1->pLeft = T; switch(T1->BalFactor) { case RH: T->BalFactor = EH; T1->BalFactor = EH; break; case EH: T->BalFactor = RH; T1->BalFactor = LH; break; } T = T1; } void RightLeft(AVLTree &T) { AVLNode* T1 = T->pRight; AVLNode* T2 = T1->pLeft; T->pRight = T2->pLeft; T2->pLeft = T; T1->pLeft = T2->pRight; T2->pRight = T1; switch(T2->BalFactor) { case LH: T->BalFactor = EH; T1->BalFactor = RH; break; case EH: T->BalFactor = EH; T1->BalFactor = EH; break; case RH: T->BalFactor = LH; T1->BalFactor = EH; break; } T2->BalFactor = 0; T = T2; } void LeftLeft(AVLTree &T) { AVLNode *T1 = T->pLeft; T->pLeft = T1->pRight; T1->pRight = T; switch(T1->BalFactor) { case LH: T->BalFactor = EH; T1->BalFactor = EH; break; case EH: T->BalFactor = LH; T1->BalFactor = RH; break; } T = T1; } void LeftRight(AVLTree &T) { AVLNode* T1 = T->pLeft; AVLNode* T2 = T1->pRight; T->pLeft = T2->pRight; T2->pRight = T; T1->pRight = T2->pLeft; T2->pLeft = T1; switch(T2->BalFactor) { case LH: T->BalFactor = RH; T1->BalFactor = EH; break; case EH: T->BalFactor = EH; T1->BalFactor = EH; break; case RH: T->BalFactor = EH; T1->BalFactor = LH; break; } T2->BalFactor = EH; T = T2; } int BalanceLeft(AVLTree &T) { AVLNode* T1 = T->pLeft; switch(T1->BalFactor) { case LH: LeftLeft(T); return 2; case EH: LeftLeft(T); return 1; case RH: LeftRight(T); return 2; } return 0; } int BalanceRight(AVLTree &T) { AVLNode* T1 = T->pRight; switch(T1->BalFactor) { case LH: RightLeft(T); return 2; case EH: RightRight(T); return 1; case RH: RightRight(T); return 2; } return 0; } //Them tu vao tu dien int InsertNode(AVLTree &T, WORD W) { int Res, i=0; if(T) { while(i Info.Word.length() || i Info.Word[i] > W.Word[i]) { Res = InsertNode(T->pLeft, W); if(Res < 2) return Res; switch(T->BalFactor) { case RH: T->BalFactor = EH; return 1; case EH: T->BalFactor = LH; return 2; case LH: BalanceLeft(T); return 1; } } else if(T->Info.Word[i] < W.Word[i]) { Res = InsertNode(T->pRight, W); if(Res < 2) return Res; switch(T->BalFactor) { case LH: T->BalFactor = EH; return 1; case EH: T->BalFactor = RH; return 2; case RH: BalanceRight(T); return 1; } } else { i++; continue; } } } T = new AVLNode; if(T == NULL) return -1; T->Info = W; T->BalFactor = EH; T->pLeft = T->pRight = NULL; return 2; } //Tim tu tu dien AVLNode* SearchNode(AVLTree &T, string word) { AVLNode* p=T; int i=0; while(p!=NULL){ if(p->Info.Word == word) return p; else if (p->Info.Word[i] > word[i]) p=p->pLeft; else if (p->Info.Word[i] < word[i]) p=p->pRight; else { i++; } } return NULL; } //Xuat tu va nghia void xuatword(WORD a) { coutpRight; return 2; } } //Xoa tu khoi tu dien int DeleteNode(AVLTree &T, WORD W) { int Res, i=0; if(T == NULL) return 0; while(i < T->Info.Word.length() || i < W.Word.length()){ if(T->Info.Word[i] > W.Word[i]) { Res = DeleteNode(T->pLeft, W); if(Res < 2) return Res; switch(T->BalFactor) { case LH: T->BalFactor = 0; return 2; case EH: T->BalFactor = 1; return 1; case RH: return BalanceRight(T); } } else if(T->Info.Word[i] < W.Word[i]) { Res = DeleteNode(T->pRight, W); if(Res < 2) return Res; switch(T->BalFactor) { case RH: T->BalFactor = 0; return 2; case EH: T->BalFactor = -1; return 1; case LH: return BalanceLeft(T); } } else { i++; } } AVLNode* p = T; if(T->pLeft == NULL) { T = T->pRight; Res = 2; } else if(T->pRight == NULL) { T = T->pLeft; Res = 2; } else{ Res = SearchStandFor(p, T->pRight,T); if(Res < 2) return Res; switch(T->BalFactor) { case RH: T->BalFactor = 0; return 2; case EH: T->BalFactor = -1; return 1; case LH: return BalanceLeft(T); } } delete p; return Res; } //Cap nhat tu dien void UpdateNode(AVLTree &T, WORD W1, WORD W2) { if (T!=NULL) { DeleteNode(T,W1); InsertNode(T,W2); } } //Nhap tu va nghia void nhapword(WORD& a) { cout
Ngày đăng: 19/06/2022, 17:29
Xem thêm: AVL tree dictionary final