Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 19 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
19
Dung lượng
268,5 KB
Nội dung
Cấutrúcdữliệuvàthuật giải
CẤU TRÚCDỮLIỆUVÀGIẢITHUẬT 1
Click To Edit Master Title Style
1
NỘI DUNG
CÂY NHỊPHÂNTÌM KIẾM
Cấu trúcdữliệuvàthuật giải
CẤU TRÚCDỮLIỆUVÀGIẢITHUẬT 1
Click To Edit Master Title Style
2
Ðịnh nghĩa câynhịphântìm kiếm
•
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
18
13 37
15 23 40
Ví dụ:
Cấu trúcdữliệuvàthuật giải
CẤU TRÚCDỮLIỆUVÀGIẢITHUẬT 1
Click To Edit Master Title Style
3
Ưu điểm của câynhịphântìm kiếm
•
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 = log
2
N
–
Trường hợp xấu nhất h = Ln
–
Tình huống xảy ra trường hợp xấu nhất ?
Cấu trúcdữliệuvàthuật giải
CẤU TRÚCDỮLIỆUVÀGIẢITHUẬT 1
Click To Edit Master Title Style
4
Cấu trúcdữliệu của câynhịphântìm kiếm
•
Cấu trúcdữ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;
struct tagTNode *pRight;
}TNode;
•
Cấu trúcdữliệu của cây
typedef TNode *TREE;
Cấu trúcdữliệuvàthuật giải
CẤU TRÚCDỮLIỆUVÀGIẢITHUẬT 1
Click To Edit Master Title Style
5
Các thao tác trên câynhịphântìm 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âynhịphântìm kiếm
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
Cấu trúcdữliệuvàthuật giải
CẤU TRÚCDỮLIỆUVÀGIẢITHUẬT 1
Click To Edit Master Title Style
6
Tạo cây rỗng
•
Cây rỗng -> địa chỉ nút gốc bằng NULL
void CreateTree(TREE &T)
{
T=NULL;
}
Cấu trúcdữliệuvàthuật giải
CẤU TRÚCDỮLIỆUVÀGIẢITHUẬT 1
Click To Edit Master Title Style
7
Tạo 1 nút có Key bằng x
TNode *CreateTNode(int x)
{
TNode *p;
p = new TNode; //cấp phát vùng nhớ động
if(p==NULL)
exit(1); // thoát
else
{
p->key = x; //gán trường dữliệu của nút = x
p->pLeft = NULL;
p->pRight = NULL;
}
return p;
}
Cấu trúcdữliệuvàthuật giải
CẤU TRÚCDỮLIỆUVÀGIẢITHUẬT 1
Click To Edit Master Title Style
8
Thêm một nút x
•
Rằng buộc: Sau khi thêm cây đảm bảo là câynhị
phân tìm kiếm.
int insertNode(TREE &T, Data X)
{ if(T)
{ if(T->Key == X) return 0;
if(T->Key > X) return insertNode(T->pLeft, X);
else return insertNode(T->pRight, X);}
T = new TNode;
if(T == NULL) return -1;
T->Key = X;
T->pLeft =T->pRight = NULL;
return 1;
}
Cấu trúcdữliệuvàthuật giải
CẤU TRÚCDỮLIỆUVÀGIẢITHUẬT 1
Click To Edit Master Title Style
9
Minh họa thêm 1 phần tử vào cây
44
18 88
13 37
59
108
15 23 40 55 71
Theâm X=50
44 < X
88 > X
59 > X
50
55 > X
Cấu trúcdữliệuvàthuật giải
CẤU TRÚCDỮLIỆUVÀGIẢITHUẬT 1
Click To Edit Master Title Style
10
Tìm nút có khoá bằng x (không dùng đệ quy)
TNode * searchNode(TREE Root, Data x)
{ Node *p = Root;
while (p != NULL)
{ if(x == p->Key) return p;
else
if(x < p->Key) p = p->pLeft;
else p = p->pRight;
}
return NULL;
}
[...]... Master1Titlecon Click To phần tử x có cây Style 44 Hủy X=37 CẤUTRÚCDỮLIỆUVÀGIẢITHUẬT 1 Cấu trúcdữliệuvàthuậtgiải 18 13 88 59 37 15 23 55 15 108 71 CẤUTRÚCDỮLIỆUVÀGIẢITHUẬT 1 Cấu trúcdữliệuvàthuậtgiải Hủy 1 nút To 2 cây con Click có Edit Master Title Style Ta dùng cách hủy gián tiếp, do X có 2 cây con Thay vì hủy X ta tìmphần tử thế mạng Y Nút Y có tối đa 1 cây con Thông tin lưu tại... CẤUTRÚCDỮLIỆUVÀGIẢITHUẬT 1 Cấu trúcdữliệuvàthuậtgiải 18 88 13 59 37 15 23 40 55 108 71 Tìm thấy X=55 12 Minh hoạ thành lập Master Title Style Click To Edit 1 cây từ dãy số 9, 5, 4, 8, 6, 3, 14,12,13 9 CẤUTRÚCDỮLIỆUVÀGIẢITHUẬT 1 Cấutrúcdữliệuvàthuậtgiải 5 1 4 4 3 12 8 13 6 13 Hủy 1 nút To khoá bằng X trên câyStyle Click có Edit Master Title Hủy 1 phần tử trên cây phải đảm bảo... phần tử trên cây phải đảm bảo điều kiện ràng buộc của Câynhịphântìmkiếm Có 3 trường hợp khi hủy 1 nút trên cây TH1: X là nút lá CẤUTRÚCDỮLIỆUVÀGIẢITHUẬT 1 Cấutrúcdữliệuvàthuậtgiải TH2: X chỉ có 1 cây con (cây con trái hoặc cây con phải) TH3: X có đầy đủ 2 cây con TH1: Ta xoá nút lá mà không ành hưởng đến các nút khác ttrên cây TH2: Trước khi xoá x ta móc nối cha của X với...CẤU TRÚCDỮLIỆUVÀGIẢITHUẬT 1 Cấutrúcdữliệuvàthuậtgiải TìmClick To Edit Master Title quy) nút có khoá bằng x (dùng đệ Style TNode *SearchTNode(TREE T, int x) { if(T!=NULL) { if(T->key==x) return T; else if(x>T->key) return SearchTNode(T->pRight,x); else return SearchTNode(T->pLeft,x); } return NULL; } 11 Minh hoạ tìm một nút Click To Edit Master Title Style 44 Tìm X=55 55 CẤUTRÚCDỮ LIỆU... 108 71 CẤUTRÚCDỮLIỆUVÀGIẢITHUẬT 1 Cấu trúcdữliệuvàthuậtgiải CàiClick Totác xoá nút có trườngStyle x đặt thao Edit Master Title Key = void DeleteNodeX1(TREE &T,int x) { if(T!=NULL) { if(T->KeyRight,x); else { if(T->Key>x) DeleteNodeX1(T->Left,x); else //tim thấy Node có trường dữliệu = x { TNode *p; p=T; if (T->Left==NULL) T = T->Right; else { if(T->Right==NULL) T=T->Left;... 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ầnEdit Master Click To tử thế mạng void ThayThe1(TREE &p, TREE &T) { if(T->Left!=NULL) ThayThe1(p,T->Left); CẤUTRÚCDỮLIỆUVÀGIẢITHUẬT 1 Cấu trúcdữliệuvàthuậtgiải else { p->Key = T->Key; p=T; T=T->Right; } } 19 Title Style ... hợp đầ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 Minh họa hủy Edit Master2 cây con Click To phần tử X có Title Style Xoá nút có trường 44 Key = 18, lúc đó nút có khoá 23 là nút thế mạng CẤUTRÚCDỮLIỆUVÀGIẢITHUẬT 1 Cấutrúcdữliệuvàthuậtgiải 18 13 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
Click To Edit Master Title Style
1
NỘI DUNG
CÂY NHỊ PHÂN TÌM KIẾM
Cấu trúc dữ liệu và thuật. nút vào cây nhị phân tìm kiếm
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
Cấu trúc dữ liệu và thuật giải
CẤU TRÚC DỮ LIỆU VÀ GIẢI