!"#$% &' ( )* +%&' *')* ,)-$ ." / !"#$% 0&1$23" 45+ 6789:7895;&&+(< 79=>2?+=&2@A;& !B!"755!B3!)1$57C !"789<".D7)"3"3 789<BEF35$ G3" 45+6789H3 "!I+789 D DJDK D D5C !"697L"$'0M !"#$% 0"E1$23" 4 569!)5$<<"!) 5$DDKD5ANODM 0H> %P"334 Q 792@5!)5$OD<FR75. 7930%&K%%S&F Q 0T'2@3"55$2?D<EF3 030&%&K%%S&FUR3'5 =D&T>'V&J&2W%&!)DH3"69< EF3 52W%& X &JYZ%K[&K$F %K$!\ U3 7@H3W 7= ]^4G_7J&`2@aT<FJ F9%"%5$ HI5$ a1$2@!"2@<"I 792@"&8"C7L 2@ 3$T' b &JYZ%K[&K$F %K$!\ @&64 cdefdcdghZ<<D\ ii^7J& OjklmOD ii5$!"#L' nFKZkmoOD\#"llj /iiT'$'0 SZOOl\!K&!pii0T' KF%K!K&!j cdefdcdghZ<<D\ ii^7J& OjklmOD ii5$!"#L' nFKZkmoOD\#"llj /iiT'$'0 SZOOl\!K&!pii0T' KF%K!K&!j q &JYZ%K[&K$F %K$!\ @&6Z@&67>[&'!" #$%FV \4 "#Kr#K[&'Z%!&"#KrS!%<KFKKs'KK\ t SZS!%OOfUU\ !K&!fUUj KF%K SZS!%uKFKKOOK\!K&!S!%j KF%K !K&!#K[&'ZS!%uKD<K\j v "#Kr#K[&'Z%!&"#KrS!%<KFKKs'KK\ t SZS!%OOfUU\ !K&!fUUj KF%K SZS!%uKFKKOOK\!K&!S!%j KF%K !K&!#K[&'ZS!%uKD<K\j v w &JYZ%K[&K$F %K$!\ ,@&64 !B98T4 Oj !B9DT&T4 $D OxZ\j !&2 2 OxZ\ y )*ZG$!' cK!\ U3 0#z ]^4 Q {L'5$7L79%_D K"aYZ|#J "C@#J\ Q @%}#L'5$7$D.F3FH3!5$^~$ #L'%PF3HIOZFl!\i Q %P R &DO9FN< &D•< . %P79Y> HIF<< &Du<. %P79Y> HI lHI! Q e&! %P#`T'5$"C #L'7$D.!^V!: p )*ZG$!' cK!\ @&64 Ggh€cdghZ<<D\ 2lOj!Ojii^7J& 2nFKZF•O!\#"ii tOZFl!\ijii(•%8~$ SD•kmK!O KF%KSDukmKFOlj KF%K!K&!j v 2/!K&!pjii0T' Ggh€cdghZ<<D\ 2lOj!Ojii^7J& 2nFKZF•O!\#"ii tOZFl!\ijii(•%8~$ SD•kmK!O KF%KSDukmKFOlj KF%K!K&!j v 2/!K&!pjii0T' [...]... kiếm 15 4. 2.1 Định nghĩa Ví dụ: 34 66 17 25 50 71 68 75 16 4. 2.1 Định nghĩa Bài tập tại lớp – Vẽ 4 cây nhị phân tìm kiếm với các giá trị sau: 3, 4, 6, 8, 9, 10, 14, 15, 17 – Vẽ cây nhị phân tìm kiếm cân đối cho các giá trị trên với số nút rỗng là ít nhất 17 4. 2.2 Các phép toán Phép tìm kiếm Phép chèn thêm một nút Phép gỡ loại bỏ một nút 18 4. 2.2.1... thì tiến hành ở nhánh con bên trái hoặc bên phải để đảm bảo tính chất của cây nhị phân tìm kiếm 22 4. 2.2.2 Phép thêm một nút Ví dụ: Thêm các nút 5, 2, 4, 6, 1, 7, 3 vào một cây rỗng theo đúng thứ tự Qua từng bước thêm, ta có cây sau: 5 2 1 6 4 7 3 23 4. 2.2.2 Phép thêm một nút void chen(int e, NODE **root) void chen(int e, NODE **root) { { NODE *tam; NODE *tam;... tìm kiếm nhị phân) 13 4. 2 Cây nhị phân tìm kiếm Việc tổ chức tập hợp khóa theo cấu trúc danh sách thì phép tìm kiếm nói chung là chi phí cao, nếu khóa đã sắp xếp thì phép tìm kiếm nhị phân hiệu quả hơn nhưng bất tiện trong việc thêm, bớt phần tử Cấu trúc cây nhị phân tìm kiếm được xây dựng để khắc phục các nhược điểm trên 14 4.2.1 Định nghĩa ... else else 33 4. 2.2.3 Phép xóa một nút Thủ tục xóa if ((*root)->left == NULL) (*root) = (*root)->right; if ((*root)->left == NULL) (*root) = (*root)->right; else else if ((*root)->right==NULL) (*root) = (*root)->left; if ((*root)->right==NULL) (*root) = (*root)->left; else (*root)->element = xoacuctrai(&(*root)->right); else (*root)->element = xoacuctrai(&(*root)->right); } } 34 4.3 Cây nhị... tam = new NODE; tam->element = e; tam->element = e; tam->left = NULL; tam->left = NULL; tam->right = NULL; tam->right = NULL; if (*root == NULL) *root = tam; if (*root == NULL) *root = tam; else else 24 4.2.2.2 Phép thêm một nút if (tam->element < (*root)->element) if (tam->element < (*root)->element) if ((*root)->left) chen(e, &(*root)->left); if ((*root)->left) chen(e, &(*root)->left); else (*root)->left... chen(e, &(*root)->right); else (*root)->right = tam; else (*root)->right = tam; else cout element; k=(*root)->element; (*root) = (*root)->right; (*root) = (*root)->right; return k; return k; } } else return xoacuctrai(&(*root)->left); else return xoacuctrai(&(*root)->left); } } 32 4. 2.2.3... Return loc; 4. 1.2 Tìm kiếm nhị phân (Binary Serching) Đánh giá giải thuật: – – – Trường hợp tốt nhất Tmin =1, tìm được ngay lần đầu tiên Trường hợp xấu nhất Tmax = k+w[n/2k) Chứng minh được Ttb = O(log2n) Trong tất cả các giải thuật tìm kiếm, tìm kiếm nhị phân là nhanh nhất, nhưng nó có nhược điểm là dãy phải được sắp xếp 12 Bài tập về nhà B1 Viết chương. .. timdequy(x,root->left); if (x < root->element) timdequy(x,root->left); else if (x>root->element) timdequy (x,root->right); else if (x>root->element) timdequy (x,root->right); else timthay =1; else timthay =1; } } 20 4. 2.2.1 Phép tìm kiếm Thủ tục không đêê quy int tim(int x,NODE *root) int tim(int x,NODE *root) { { int timthay =0; int timthay =0; while ((root !=NULL) && (!timthay)) while ((root !=NULL) && (!timthay)) . &JYZ%K[&K$F %K$! ,@&6 4 !B98T 4 Oj !B9DT&T 4 $D OxZj !&2 2 OxZ y )*ZG$!' cK! U3. !"#$% 0"E1$23" 4 569!)5$<<"!) 5$DDKD5ANODM 0H> %P"33 4 Q 792@5!)5$OD<FR75. . F•! thenF"OpiiF"a$•%8a1$ ii5$J elseOZFl!ij ifD•km thenF"OhGgh€cdghZF<<<D elseSDukm thenF"OhGgh€cdghZl<!<<D elseF"Oj G 4 ReturnF"j )*ZG$!' cK! ,@&6 4 Q !B98TO<79$' FJ7J&V Q !B9DT&T$DOlnki Q a792OxZF" !"T@@&6