You are on page 1of 22

CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT 1

Cấu trúc dữ liệu và thuật giải Click To Edit

1
NỘIMaster

CÂY NHỊ PHÂN TÌM KIẾM


DUNGTitle Style
Ðịnh nghĩaTo
Click cây nhị Master
Edit phân tìm Title
kiếm Style
• Cây nhị phân
• Bảo đảm nguyên tắc bố trí khoá tại mỗi nút:
– Các nút trong cây trái nhỏ hơn nút hiện hành
– Các nút trong cây phải lớn hơn nút hiện hành
Cấu trúc dữ liệu và thuật giải

Ví dụ:
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT 1

18

13 37

15 23 40
2
Ưu Click
điểm của
To cây
Editnhị phân tìm
Master kiếm
Title Style
• Nhờ trật tự bố trí khóa trên cây :
– Định hướng được khi tìm kiếm
• Cây gồm N phần tử :
– Trường hợp tốt nhất h = log2N
– Trường hợp xấu nhất h = N
Cấu trúc dữ liệu và thuật giải
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT 1

– Tình huống xảy ra trường hợp xấu nhất ?

3
CấuClick
trúc dữ
Toliệu củaMaster
Edit cây nhị Title
phân Style
tìm kiếm
• Cấu trúc dữ liệu của 1 nút
typedef struct tagTNode
{
int Key; //trường dữ liệu là 1 số nguyên
struct tagTNode *pLeft;
Cấu trúc dữ liệu và thuật giải
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT 1

struct tagTNode *pRight;


}TNode;
• Cấu trúc dữ liệu của cây
typedef TNode *TREE;
4
CácClick
thao tác
To trên
Editcây nhị phân
Master tìmStyle
Title kiếm

➢ Tạo 1 cây rỗng

➢ Tạo 1 nút có trường Key bằng x

➢ Thêm 1 nút vào cây nhị phân tìm kiếm


Cấu trúc dữ liệu và thuật giải
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT 1

➢ Xoá 1 nút có Key bằng x trên cây

➢ Tìm 1 nút có khoá bằng x trên cây

5
TạoClick
cây rỗng
To Edit Master Title Style
• Cây rỗng -> địa chỉ nút gốc bằng NULL
void CreateTree(TREE &T)
{
T=NULL;
}
Cấu trúc dữ liệu và thuật giải
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT 1

6
TạoClick
1 nút To
có Key
Editbằng x
Master Title Style
TNode *CreateTNode(int x)
{
TNode *p;
p = new TNode; //cấp phát vùng nhớ động
if(p==NULL)
exit(1); // thoát
Cấu trúc dữ liệu và thuật giải

else
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT 1

{
p->key = x; //gán trường dữ liệu của nút = x
p->pLeft = NULL;
p->pRight = NULL;
}
return p;
} 7
Thêm mộtTo
Click nútEdit
x Master Title Style
Rằng buộc: Sau khi thêm cây đảm bảo là cây nhị phân tìm kiếm.
int insertNode(TREE &T, Data X)
{
if (T != NULL)
{
if (T->Key == X) return 0;
Cấu trúc dữ liệu và thuật giải
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT 1

if (T->Key > X) return insertNode(T->pLeft, X);


else return insertNode(T->pRight, X);
}
T = CreateTNode(X);
return 1;
}

8
Minh họa thêm
Click 1 phần
To Edit tử vàoTitle
Master cây Style
T
44 44 < X
Thêm X=50

18 88 > X 88
Cấu trúc dữ liệu và thuật giải
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT 1

13 37 59 108
59 > X

15 23 40 55 71
55 > X
insertNode(T, X)
50
9
TìmClick
nút cóTo
khoá bằng
Edit x (dùng
Master đệ quy)
Title Style
TNode *SearchTNode(TREE T, int x)
{
if(T!=NULL)
{
if(T->key==x)
return T;
Cấu trúc dữ liệu và thuật giải

else if(x>T->key)
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT 1

return SearchTNode(T->pRight,x);
else
return SearchTNode(T->pLeft,x);
}
return NULL;
}
10
TìmClick
nút có khoá bằngMaster
To Edit x (không dùng
TitleđệStyle
quy)
TNode * searchNode(TREE Root, Data x)
{
Node *p = Root;
while (p != NULL)
{ if(x == p->Key) return p;
Cấu trúc dữ liệu và thuật giải
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT 1

else if(x < p->Key) p = p->pLeft;


else p = p->pRight;
}
return NULL;
}
11
Minh hoạ tìm
Click To một
Editnút
Master Title Style
44
Tìm X=55

55
18 88
Cấu trúc dữ liệu và thuật giải
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT 1

13 37 59 108

15 23 40 55 71

Tìm thấy X=55


12
Minh hoạ thành
Click lập Master
To Edit 1 cây từ Title
dãy sốStyle
9, 5, 4, 8, 6, 3, 14,12,13
9

5 14
Cấu trúc dữ liệu và thuật giải
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT 1

4 8 12

3 6 13

13
XóaClick
1 nút To
có khoá
Edit bằng X trên
Master câyStyle
Title
➢ Xóa 1 phần tử trên cây phải đảm bảo điều kiện
ràng buộc của Cây nhị phân tìm kiếm
➢ Có 3 trường hợp khi xóa 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 hoặc cây con phải)
Cấu trúc dữ liệu và thuật giải
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT 1

▪ TH3: X có đầy đủ 2 cây con

➢ TH1: Xoá nút lá mà không ảnh hưởng đến các nút


khác trên cây
➢ TH2: Trước khi xoá X ta móc nối cha của X với con
duy nhất của X.
➢ TH3: Dùng cách xoá gián
14 tiếp
XóaClick
phần To
tử xEdit
có 1 Master
cây con Title Style
Hủy X=37 44

18 88
Cấu trúc dữ liệu và thuật giải
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT 1

13 37 59 108

15 23 55 71

15
XóaClick
1 nút To
có 2Edit
cây Master
con Title Style
➢ Ta dùng cách xóa gián tiếp, do X có 2 cây con
➢ Thay vì xóa X ta tìm phần tử thế mạng Y. Nút Y có
tối đa 1 cây con.
➢ Thông tin lưu tại nút Y sẽ được chuyển lên lưu tại
X.
➢ Ta tiến hành xoá nút Y (xoá Y giống 2 trường hợp
Cấu trúc dữ liệu và thuật giải
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT 1

đầu)
➢ Cách tìm nút thế mạng Y cho X: Có 2 cách
▪ C1: Nút Y là nút có khoá nhỏ nhất (trái nhất) bên
cây con phải X
▪ C2: Nút Y là nút có khoá lớn nhất (phải nhất) bên
cây con trái của X
16
XóaClick
phần To
tử XEdit
có 2Master
cây con Title Style
Xoá nút có trường 44
Key = 18, lúc đó nút có
khoá 23 là nút thế mạng

18 88
Cấu trúc dữ liệu và thuật giải
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT 1

13 37 59 108

15 23 40 55 71

30
17
CàiClick
đặt thao
Totác xoáMaster
Edit nút có trường Key = x
Title Style
void DeleteNodeX1(TREE &T,int x)
{
if(T!=NULL)
{
if(T->Key < x) DeleteNodeX1(T->Right, x);
else if(T->Key>x) DeleteNodeX1(T->Left, x);
else //tim thấy Node có trường dữ liệu = x
{
TNode *p = T;
if (T->Left ==NULL) T = T->Right;
Cấu trúc dữ liệu và thuật giải
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT 1

else if(T->Right==NULL) T=T->Left;


else
ThayThe1(p, T->Right);// tìm bên cây con phải

delete p;
}
}
else
printf("Khong tim thay phan can xoa tu");
}

18
Hàm tìm phần
Click tử thế
To Edit mạng
Master Title Style
void ThayThe1(TREE &p, TREE &T)
{ if(T->Left!=NULL)
ThayThe1(p,T->Left);
else
{
Cấu trúc dữ liệu và thuật giải
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT 1

p->Key = T->Key; // Gán lại giá trị node bi


xoá
p = T; // Trỏ đến node bị xoá thực sự
T = T->Right; //Cô lập node bị xoá
} 19
BàiMaster
Click To Edit tập Title Style
• Cài đặt để nhập một danh sách các số
nguyên vào Cây NPTK cho đến khi gặp số 0.
• In ra tình trạng cây.
• Tìm giá trị X (nhập từ bàn phím) xem có trên
cây hay không?
Cấu trúc dữ liệu và thuật giải
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT 1

• Nếu có X, hãy xoá nó khỏi cây và in ra tình


trạng cây.
– Định nghĩa - Duyệt cây
– Tạo cây, node, insert node
– Tìm x - Xoá node
20
BàiMaster
Click To Edit tập Title Style
• void main( ){
TREE T; CreateTree(T);
while( 1 ) {
X =?
if (X == 0) break;
Cấu trúc dữ liệu và thuật giải
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT 1

InsertNode(T, X);
}
DuyetLNR( T );
int h = DoCaoCay(T );
printf(“Do cao cua cay%d”, h);
21
BàiMaster
Click To Edit tập Title Style
X=?
TNode p = SearchNode( T, X );
if (p == NULL)
printf(“Ko co’”);
else {
Cấu trúc dữ liệu và thuật giải
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT 1

DeleteNode(T, X);
DuyetLNR( T );
}

22

You might also like