You are on page 1of 8

CY NH PHN TM KIM

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.

Thi gian thc hnh: t 120 pht n 400 pht

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

NI DUNG THC HNH C bn


Sinh vin c k pht biu bi tp v thc hin theo hng dn: T chc mt cy nh phn tm kim trong mi phn t cha thng tin d liu l s nguyn. Ngi dng s nhp cc gi tr nguyn t bn phm. Vi mi gi tr nguyn c nhp vo, gi tr c thm vo cy nh phn tm kim m vn m bo cy sau khi thm vn l cy nh phn tm kim. Nu ngi dng nhp vo gi tr -1, qu trnh nhp d liu s kt thc. Cy ban u l cy rng (cha c nt no) Sau , in ra cc phn t ang c trn cy bng phng php duyt trc. Cho ngi dng nhp vo 1 gi tr nguyn t bn phm, cho bit gi tr ny c trong cy hay khng. Nu c, cho bit nt c cao bao nhiu. Sau , xa nt khi cy, xut cy sau khi xa bng phng php duyt trc Phn tch Cy nh phn tm kim c mi nt cha d liu nguyn. Thng tin ca mi nt c khai bo theo ngn ng C/C++ nh sau:

struct NODE{ int Key; NODE *pLeft; NODE *pRight; };

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

printf("%d khong co trong cay.\n", x); }

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

7. Trong hm NLR nu ta i trt t nh bn di th kt qu th no?


void NLR(NODE* pTree) { if(pTree != NULL) { NLR(pTree->pLeft); printf("%4d", pTree->Key); NLR(pTree->pRight); Ti liu hng dn thc hnh mn Cu trc d liu v gii thut HCMUS 2010

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); }

10. Trong hm RemoveNode nu khng c dng delete p; th kt qu c g khc? Dng dng lm g.

p dng Nng cao


1. B sung chng trnh mu cho php tnh tng gi tr cc nt trn cy nh phn gm cc gi tr nguyn. Gi : tham kho hm NLR vit hm SumTree. 2. B sung chng trnh mu cho php tm gi tr nguyn ln nht v nh nht trong s cc phn t nguyn trn cy nh phn tm kim gm cc gi tr nguyn. Gi : da vo tnh cht 1, 2 ca cy nh phn tm kim. 3. B sung chng trnh mu cho php tnh s lng cc nt ca cy nh phn gm cc gi tr nguyn. Gi : tham kho hm NLR vit hm CountNode. 4. B sung chng trnh mu cho bit s lng cc nt l trn cy nh phn. Gi : tham kho thao tc duyt cy nh phn NLR. 5. S dng cy nh phn tm kim gii bi ton: a. m c bao nhiu gi tr phn bit trong dy s cho trc b. Vi mi gi tr phn bit, cho bit s lng phn t

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

You might also like