AVL tree dictionary final

11 22 0
AVL tree dictionary final

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

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

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan