CTDL-Lab04-Cay Nhi Phan Tim Kiem

download CTDL-Lab04-Cay Nhi Phan Tim Kiem

of 8

Transcript of CTDL-Lab04-Cay Nhi Phan Tim Kiem

CY NH PHN TM KI MM C TIUHon t t bi th c hnh ny, sinh vin c th : Hi u c cc thnh ph n c a cy nh phn tm ki m. Thnh th o cc thao tc trn cy nh phn tm ki m: t o cy, thm ph n t , xa ph n t , duy t cy nh phn tm ki m. p d ng c u trc d li u cy nh phn tm ki m vo vi c gi i quy t m t s bi ton n gi n. n 400 pht

Th i gian th c hnh: t 120 pht

TM T TCy nh phn tm ki m l cy c t i a 2 nhnh (cy con), nhnh tri v nhnh ph i. Cy nh phn tm ki m c cc tnh ch t sau: Kha c a t t c cc nt thu c cy con tri nh hn kha nt g c. Kha c a nt g c nh hn kha c a t t c cc nt thu c cy con ph i. Cy con tri v cy con ph i c a nt g c cng l cy nh phn tm ki m

M t s khi ni m:

-

Nt l c

cao b ng 1

Ti li u h ng d n th c hnh mn C u trc d HCMUS 2010

li u v gi i thu t

Trang

1

V d cy nh phn tm ki m:

Trong m i nt c a cy nh phn tm ki m, thng tin lin k t l v cng quan tr ng. Ch c n m t x l khng c n th n c th lm m t ph n lin k t ny th cy s b gy cy con lin quan ng v i lin k t (khng th truy xu t ti p t t c cc nt c a nhnh con b m t). Cc thao tc c b n trn cy nh phn tm ki m: Thm 1 nt: d a vo tnh ch t c a cy nh phn tm ki m tm v tr thm nt m i. o T o cy: t cy r ng, l n l t thm cc nt vo cy b ng phng th c thm nt vo cy nh phn tm ki m Xa 1 nt: l nt l, l nt c 1 nhnh con, l nt c 2 nhnh con. Duy t cy nh phn tm ki m: c th i c h t cc ph n t trn cy nh phn tm ki m: duy t tr c (NLR), duy t gi a (LNR), duy t sau (LRN). Do tnh ch t c a cy nh phn tm ki m, php duy t gi a cho php duy t cc kha c a cy theo th t tng d n

Ti li u h ng d n th c hnh mn C u trc d HCMUS 2010

li u v gi i thu t

Trang

2

N I DUNG TH C HNH C b nSinh vin c k pht bi u bi t p v th c hi n theo h ng d n: T ch c m t cy nh phn tm ki m trong m i ph n t ch a thng tin d li u l s nguyn. Ng i dng s nh p cc gi tr nguyn t bn phm. V i m i gi tr nguyn c nh p vo, gi tr c thm vo cy nh phn tm ki m m v n m b o cy sau khi thm v n l cy nh phn tm ki m. N u ng i dng nh p vo gi tr -1, qu trnh nh p d li u s k t thc. Cy ban u l cy r ng (cha c nt no) Sau , in ra cc ph n t ang c trn cy b ng phng php duy t tr c. Cho ng i dng nh p vo 1 gi tr nguyn t bn phm, cho bi t gi tr ny c trong cy hay khng. N u c, cho bi t nt c cao bao nhiu. Sau , xa nt kh i cy, xu t cy sau khi xa b ng phng php duy t tr c Phn tch Cy nh phn tm ki m c m i nt ch a d li u nguyn. Thng tin c a m i nt c khai bo theo ngn ng C/C++ nh sau:

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

-

Thao tc c n th c hi n: o Khai bo, kh i t o cy o (l p) thm nt c kha nguyn vo cy nh phn tm ki m (Insert), o in cc nt c a cy nh phn tm ki m (NLR), o tm 1 gi tr , n u c: tnh cao c a nt (Height) xa nt kh i cy (RemoveNode) in cc nt c a cy sau khi xa (NLR)

Chng trnh m u#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 li u h ng d n th c hnh mn C u trc d HCMUS 2010

li u v gi i thu t

Trang

3

{ 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 tr ng h p no dng bn d i 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 li u h ng d n th c hnh mn C u trc d HCMUS 2010 li u v gi i thu t

c th c hi n?

Trang

4

} 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: M c 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 d i dng 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 li u h ng d n th c hnh mn C u trc d HCMUS 2010 li u v gi i thu t

lm g?

Trang

5

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

Yu c u 1. Bin d ch o n chng trnh nu trn. 2. Cho bi t k t qu in ra mn hnh khi ng i dng nh p vo cc d li u sau: -1 -1 ---------------------------------5 -1 ---------------------------------7 -23 ----------------------------------23 -23 ---------------------------------7 -23 ---------------------------------1 3 3. Nu nh n xt ng n g n m i lin h gi a th t nh p d li u vo (v i cng t p d li u d li u th 3, 4, v 5) v i th t in d li u ra mn hnh. 4. V hnh cy nh phn tm ki m theo d li u c nh p 5. N u b Init(pTree) trong hm main k t qu c thay cu 2. i hay khng? Gi i thch l do? 2 3 4 -1 5 10 -23 -4 1 -25 -1 7 10 -25 -4 1 -1 10 -23 -25 -4 1 -1 -1

6. N u trong hm CreateTree vng l p dowhile c thay i nh d i y th k t qu k t xu t ra mn hnh s nh th no i v i d li u cu 2? Gi i 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);

7. Trong hm NLR n u ta

i tr t t nh bn d i th k t qu th no?

Ti li u h ng d n th c hnh mn C u trc d HCMUS 2010

li u v gi i thu t

Trang

void NLR(NODE* pTree) { if(pTree != NULL) { NLR(pTree->pLeft); printf("%4d", pTree->Key); NLR(pTree->pRight);

6

} }

8. Hy ghi ch cc thng tin b ng cch tr l i cc cu h i ng v i cc dng l nh c yu c u ghi ch (//Ghi ch) trong cc hm Search, RemoveNode. 9. N u trong hm RemoveNode thay i nh sau, k t qu c thay k t qu khng thay i. N u khng, gi i thch l doelse { //Ghi ch: Hm bn d i dng lm g? SearchStandFor(Tree->pRight,p); }

i khng? N u c, ch ra cch

10. Trong hm RemoveNode n u khng c dng delete p; th k t qu c g khc? Dng dng lm g.

p d ng Nng cao1. B sung chng trnh m u cho php tnh t ng gi tr cc nt trn cy nh phn g m cc gi tr nguyn. G i : tham kh o hm NLR vi t hm SumTree. 2. B sung chng trnh m u cho php tm gi tr nguyn l n nh t v nh nh t trong s cc ph n t nguyn trn cy nh phn tm ki m g m cc gi tr nguyn. G i : d a vo tnh ch t 1, 2 c a cy nh phn tm ki m. 3. B sung chng trnh m u cho php tnh s l ng cc nt c a cy nh phn g m cc gi tr nguyn. G i : tham kh o hm NLR vi t hm CountNode. 4. B sung chng trnh m u cho bi t s l ng cc nt l trn cy nh phn. G i : tham kh o thao tc duy t cy nh phn NLR. 5. S d ng cy nh phn tm ki m a. gi i bi ton: m c bao nhiu gi tr phn bi t trong dy s cho tr c

b. V i m i gi tr phn bi t, cho bi t s l ng ph n t

BI T P THM1. S d ng cy nh phn tm ki m gi i bi ton m (th ng k) s l ng k t c trong vn b n (Khng d u). a. Xy d ng cy cho bi t m i k t c trong vn b n xu t hi n m y l n b. Nh p vo 1 k t . Ki m tra k t V d : Vn b n c n i dung nh sau: hoc sinh di hoc mon sinh hoc K t qu cho th y nh sau: Trangli u v gi i thu t

xu t hi n bao nhiu l n trong vn b n

2. Bi ton tng t nh trn nhng th ng k s l ng ti ng c trong vn b n (khng d u)

hoc: 3 mon: 1Ti li u h ng d n th c hnh mn C u trc d HCMUS 2010

7

di: 1

sinh: 2

Ti li u h ng d n th c hnh mn C u trc d HCMUS 2010

li u v gi i thu t

Trang

8