Professional Documents
Culture Documents
MC TIU
Hon tt bi thc hnh ny, sinh vin c th: Hiu c cc thnh phn ca cy nh phn tm kim. Thnh tho cc thao tc trn cy nh phn tm kim: to cy, thm phn t, xa phn t, duyt cy nh phn tm kim. p dng cu trc d liu cy nh phn tm kim vo vic gii quyt mt s bi ton n gin.
TM TT
Cy nh phn tm kim l cy c ti a 2 nhnh (cy con), nhnh tri v nhnh phi. Cy nh phn tm kim c cc tnh cht sau: Kha ca tt c cc nt thuc cy con tri nh hn kha nt gc. Kha ca nt gc nh hn kha ca tt c cc nt thuc cy con phi. Cy con tri v cy con phi ca nt gc cng l cy nh phn tm kim
Mt s khi nim:
Nt l c cao bng 1
Ti liu hng dn thc hnh mn Cu trc d liu v gii thut HCMUS 2010
Trang
V d cy nh phn tm kim:
Trong mi nt ca cy nh phn tm kim, thng tin lin kt l v cng quan trng. Ch cn mt x l khng cn thn c th lm mt phn lin kt ny th cy s b gy cy con lin quan ng vi lin kt (khng th truy xut tip tt c cc nt ca nhnh con b mt). Cc thao tc c bn trn cy nh phn tm kim: Thm 1 nt: da vo tnh cht ca cy nh phn tm kim tm v tr thm nt mi. o To cy: t cy rng, ln lt thm cc nt vo cy bng phng thc thm nt vo cy nh phn tm kim Xa 1 nt: l nt l, l nt c 1 nhnh con, l nt c 2 nhnh con. Duyt cy nh phn tm kim: c th i c ht cc phn t trn cy nh phn tm kim: duyt trc (NLR), duyt gia (LNR), duyt sau (LRN). Do tnh cht ca cy nh phn tm kim, php duyt gia cho php duyt cc kha ca cy theo th t tng dn
Ti liu hng dn thc hnh mn Cu trc d liu v gii thut HCMUS 2010
Trang
Thao tc cn thc hin: o Khai bo, khi to cy o (lp) thm nt c kha nguyn vo cy nh phn tm kim (Insert), o in cc nt ca cy nh phn tm kim (NLR), o tm 1 gi tr, nu c: tnh cao ca nt (Height) xa nt khi cy (RemoveNode) in cc nt ca cy sau khi xa (NLR)
Chng trnh mu
#include "stdio.h" struct NODE{ int Key; NODE *pLeft; NODE *pRight; }; void Init(NODE *&TREE) { TREE = NULL; } void { Insert (NODE *&pRoot, int x)
if (pRoot == NULL) Ti liu hng dn thc hnh mn Cu trc d liu v gii thut HCMUS 2010
Trang
{ NODE *q; q = new NODE; q->Key = x; q->pLeft = q->pRight = NULL; pRoot = q; } else { if (x < pRoot->Key) Insert (pRoot->pLeft, x); else if (x > pRoot->Key) Insert (pRoot->pRight, x); } } void CreateTree(NODE *&pRoot) { int Data; do{ printf("Nhap vao du lieu, -1 de ket thuc: "); scanf("%d", &Data); if (Data == -1) break; Insert(pRoot, Data); } while(1); } void NLR(NODE* pTree) { if(pTree != NULL) { printf("%4d", pTree->Key); NLR(pTree->pLeft); NLR(pTree->pRight); } } NODE* Search(NODE* pRoot, int x) { if(pRoot == NULL) return NULL; if(x < pRoot->Key) Search(pRoot->pLeft, x); else if(x > pRoot->Key) Search(pRoot->pRight, x); else { //Ghi ch: Trong trng hp no dng bn di c thc hin? return pRoot; } } int Height(NODE* pNode) { if(pNode == NULL) return 0; int HL, HR; HL = Height(pNode->pLeft); HR = Height(pNode->pRight); if(HL > HR) return (1 + HL); return (1 + HR); Ti liu hng dn thc hnh mn Cu trc d liu v gii thut HCMUS 2010
Trang
} void SearchStandFor(NODE* &Tree, NODE* &q) { if (Tree->pRight) SearchStandFor(Tree->pRight,q); else { q->Key = Tree->Key; q = Tree; Tree = Tree->pLeft; } } void RemoveNode(NODE* &Tree, int x) { NODE* p; if(Tree == NULL) printf("%d khong co trong cay", x); else { if (x < Tree->Key) RemoveNode(Tree->pLeft,x); else if (x > Tree->Key) RemoveNode(Tree->pRight,x); else { //Ghi ch: Mc ch php gn ny l g? p = Tree; if(p->pRight == NULL) Tree = p->pLeft; else if (p->pLeft == NULL) Tree = p->pRight; else { //Ghi ch: Hm bn di dng lm g? SearchStandFor(Tree->pLeft,p); } delete p; } } } void main() { NODE* pTree, *p; int x; Init(pTree); CreateTree(pTree); NLR(pTree); printf("Nhap vao 1 gia tri de tim: "); scanf("%d", &x); p = Search(pTree, x); if(p != NULL) { printf ("%d co xuat hien trong cay.\n", x); printf("Chieu cao cua nut %d la %d\n", x, Height(p)); RemoveNode(pTree, x); NLR(pTree); } else Ti liu hng dn thc hnh mn Cu trc d liu v gii thut HCMUS 2010
Trang
Yu cu 1. Bin dch on chng trnh nu trn. 2. Cho bit kt qu in ra mn hnh khi ngi dng nhp vo cc d liu sau: -1 -1 ---------------------------------5 -1 ---------------------------------7 -23 ----------------------------------23 -23 ---------------------------------7 -23 ---------------------------------1 3 3. Nu nhn xt ngn gn mi lin h gia th t nhp d liu vo (vi cng tp d liu d liu th 3, 4, v 5) vi th t in d liu ra mn hnh. 4. V hnh cy nh phn tm kim theo d liu c nhp cu 2. 5. Nu b Init(pTree) trong hm main kt qu c thay i hay khng? Gii thch l do? 6. Nu trong hm CreateTree vng lp dowhile c thay i nh di y th kt qu kt xut ra mn hnh s nh th no i vi d liu cu 2? Gii thch l do?
do { printf("Nhap vao du lieu, -1 de ket thuc: "); scanf("%d", &Data); Insert(pRoot, Data); if (Data == -1) break; }while (1);
-1
10
-23
-25
-4
-1
10
-25
-4
-1
10
-23
-4
-25
-1
-1
Trang
} }
8. Hy ghi ch cc thng tin bng cch tr li cc cu hi ng vi cc dng lnh c yu cu ghi ch (//Ghi ch) trong cc hm Search, RemoveNode. 9. Nu trong hm RemoveNode thay i nh sau, kt qu c thay i khng? Nu c, ch ra cch kt qu khng thay i. Nu khng, gii thch l do
else { //Ghi ch: Hm bn di dng lm g? SearchStandFor(Tree->pRight,p); }
BI TP THM
1. S dng cy nh phn tm kim gii bi ton m (thng k) s lng k t c trong vn bn (Khng du). a. Xy dng cy cho bit mi k t c trong vn bn xut hin my ln b. Nhp vo 1 k t. Kim tra k t xut hin bao nhiu ln trong vn bn 2. Bi ton tng t nh trn nhng thng k s lng ting c trong vn bn (khng du) V d: Vn bn c ni dung nh sau: hoc sinh di hoc mon sinh hoc Kt qu cho thy nh sau: Trang hoc: 3 mon: 1
Ti liu hng dn thc hnh mn Cu trc d liu v gii thut HCMUS 2010
di: 1
sinh: 2
Ti liu hng dn thc hnh mn Cu trc d liu v gii thut HCMUS 2010
Trang