CTDL_07_CayNhiPhanTimK

19
u trúc dữ liệu và thuật giải CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT 1 Click To Edit Master Title Style 1 NỘI DUNG CÂY NHỊ PHÂN TÌM KIẾM

description

Cây nhị phân tìm kiếm

Transcript of CTDL_07_CayNhiPhanTimK

Dãy – Danh sáchCU TRÚC D LIU VÀ GII THUT 1
Click To Edit Master Title Style
*
Cu trúc d liu và thut gii
CU TRÚC D LIU VÀ GII THUT 1
Click To Edit Master Title Style
*
Cây nh phân
Bo m nguyên tc b trí khoá ti mi nút:
Các nút trong cây trái nh hn nút hin hành
Các nút trong cây phi ln hn nút hin hành
Ví d:
CU TRÚC D LIU VÀ GII THUT 1
Click To Edit Master Title Style
*
nh hng c khi tìm kim
Cây gm N phn t :
Trng hp tt nht h = log2N
Trng hp xu nht h = Ln
Tình hung xy ra trng hp xu nht ?
Cu trúc d liu và thut gii
CU TRÚC D LIU VÀ GII THUT 1
Click To Edit Master Title Style
*
Cu trúc d liu ca cây nh phân tìm kim
Cu trúc d liu ca 1 nút
typedef struct tagTNode
struct tagTNode *pLeft;
struct tagTNode *pRight;
typedef TNode *TREE;
CU TRÚC D LIU VÀ GII THUT 1
Click To Edit Master Title Style
*
To 1 cây rng
Thêm 1 nút vào cây nh phân tìm kim
Xoá 1 nút có Key bng x trên cây
Tìm 1 nút có khoá bng x trên cây
Cu trúc d liu và thut gii
CU TRÚC D LIU VÀ GII THUT 1
Click To Edit Master Title Style
*
void CreateTree(TREE &T)
CU TRÚC D LIU VÀ GII THUT 1
Click To Edit Master Title Style
*
TNode *CreateTNode(int x)
if(p==NULL)
exit(1); // thoát
p->key = x; //gán trng d liu ca nút = x
p->pLeft = NULL;
p->pRight = NULL;
CU TRÚC D LIU VÀ GII THUT 1
Click To Edit Master Title Style
*
Thêm mt nút x
Rng buc: Sau khi thêm cây m bo là cây nh phân tìm kim.
int insertNode(TREE &T, Data X)
{ if(T)
if(T->Key > X) return insertNode(T->pLeft, X);
else return insertNode(T->pRight, X);}
T = new TNode;
return 1;
CU TRÚC D LIU VÀ GII THUT 1
Click To Edit Master Title Style
*
44 < X
88 > X
59 > X
55 > X
CU TRÚC D LIU VÀ GII THUT 1
Click To Edit Master Title Style
*
Tìm nút có khoá bng x (không dùng quy)
TNode * searchNode(TREE Root, Data x)
{ Node *p = Root;
  while (p != NULL)
else
else p = p->pRight;
CU TRÚC D LIU VÀ GII THUT 1
Click To Edit Master Title Style
*
TNode *SearchTNode(TREE T, int x)
{
CU TRÚC D LIU VÀ GII THUT 1
Click To Edit Master Title Style
*
44
18
88
13
37
59
108
15
23
40
55
71
CU TRÚC D LIU VÀ GII THUT 1
Click To Edit Master Title Style
*
9, 5, 4, 8, 6, 3, 14,12,13
9
5
14
8
4
6
3
12
13
CU TRÚC D LIU VÀ GII THUT 1
Click To Edit Master Title Style
*
Hy 1 nút có khoá bng X trên cây
Hy 1 phn t trên cây phi m bo iu kin ràng buc ca Cây nh phân tìm kim
Có 3 trng hp khi hy 1 nút trên cây
TH1: X là nút lá
TH2: X ch có 1 cây con (cây con trái hoc cây con phi)
TH3: X có y 2 cây con
TH1: Ta xoá nút lá mà không ành hng n các nút khác ttrên cây
TH2: Trc khi xoá x ta móc ni cha ca X vi con duy nht cùa X.
TH3: Ta dùng cách xoá gián tip
Cu trúc d liu và thut gii
CU TRÚC D LIU VÀ GII THUT 1
Click To Edit Master Title Style
*
Minh ho hy phn t x có 1 cây con
44
18
88
13
59
108
15
23
55
71
CU TRÚC D LIU VÀ GII THUT 1
Click To Edit Master Title Style
*
Hy 1 nút có 2 cây con
Ta dùng cách hy gián tip, do X có 2 cây con
Thay vì hy X ta tìm phn t th mng Y. Nút Y có ti a 1 cây con.
Thông tin lu ti nút Y s c chuyn lên lu ti X.
Ta tin hành xoá hy nút Y (xoá Y ging 2 trng hp u)
Cách tìm nút th mng Y cho X: Có 2 cách
C1: Nút Y là nút có khoá nh nht (trái nht) bên cây con phi X
C2: Nút Y là nút có khoá ln nht (phi nht) bên cây con trái ca X
Cu trúc d liu và thut gii
CU TRÚC D LIU VÀ GII THUT 1
Click To Edit Master Title Style
*
Minh ha hy phn t X có 2 cây con
44
18
88
13
37
59
108
15
23
40
55
71
30
Xoá nút có trng
Key = 18, lúc ó nút có khoá 23 là nút th mng
23
CU TRÚC D LIU VÀ GII THUT 1
Click To Edit Master Title Style
*
Cài t thao tác xoá nút có trng Key = x
void DeleteNodeX1(TREE &T,int x)
else
else //tim thy Node có trng d liu = x
{ TNode *p;
p=T;
else
else ThayThe1(p, T->Right);// tìm bên cây con phi
}
Cu trúc d liu và thut gii
CU TRÚC D LIU VÀ GII THUT 1
Click To Edit Master Title Style
*
void ThayThe1(TREE &p, TREE &T)
{ if(T->Left!=NULL)