Cây nhị phân tìm kiếm
lượt xem 123
download
Hủy 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. 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ìm phần tử thế mạng Y. Nút Y có tối đa 1 cây con. Ta tiến hành xoá hủy nút Y (xoá Y giống 2 trường hợp đầu).
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Cây nhị phân tìm kiếm
- NỘI DUNG Click To Edit Master Title Style 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 1
- Click To Edit Master Title Style Ðịnh nghĩa cây nhị phân tì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 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 Ví dụ: 18 13 37 15 23 40 2
- Ưu ClickcTo cây nhị phân tìm kiếm điểm ủa Edit Master 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 Cấu trúc dữ liệu và thuật giải – Trường hợp xấu nhất h = Ln 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ấu trúc dTo ệu của cây nhị Title tìm kiếm Click ữ li Edit Master phân Style • 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ácClicktác trên cây nhị phân tìm Style thao To Edit Master 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
- Click To Edit Master Title Style 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úc dữ liệu và thuật giải CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT 1 6
- Click To Edit Master Title Style 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 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 Edit Click nút 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) { if(T->Key == X) return 0; if(T->Key > X) return insertNode(T->pLeft, X); 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 return insertNode(T->pRight, X);} T = new TNode; if(T == NULL) return -1; T->Key = X; T->pLeft =T->pRight = NULL; return 1; } 8
- Minh họa thêm 1 phMaster Title Click To Edit ần tử vào cây Style 44 < X 44 Theâm X=50 18 88 88 > X 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 59 13 37 108 59 > X 15 23 40 55 71 55 > X 50 9
- Tìm Click khoáEdit Master dùng đStyle nút có To bằng x (không Title ệ quy) TNode * searchNode(TREE Root, Data x) { Node *p = Root; while (p != NULL) { if(x == p->Key) return p; 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 if(x < p->Key) p = p->pLeft; else p = p->pRight; } return NULL; } 10
- TìmClick To Edit ng x (dùng đệ quy) nút có khoá bằ Master 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 CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT 1 if(x>T->key) return SearchTNode(T->pRight,x); else return SearchTNode(T->pLeft,x); } return NULL; } 11
- Click To Edit Master Title Style Minh hoạ tìm một nút 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 59 108 13 37 15 23 40 55 71 Tìm thấy X=55 12
- Minh hoạ thành lập Master dãy số Click To Edit 1 cây từ Title Style 9, 5, 4, 8, 6, 3, 14,12,13 9 14 5 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 12 8 4 13 6 3 13
- Hủy 1 nút Tokhoá bMaster Title Style Click có Edit ằng X trên cây Hủy 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 hủy 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: 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 con duy nhất cùa X. TH3: Ta dùng cách xoá gián tiếp 14
- Minh hoạ hủy Edit Master Title Style Click To phần tử x có 1 cây con 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 59 13 37 108 15 23 55 71 15
- Hủy 1 nút To2Edit con Click có cây 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ì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á hủy nút Y (xoá Y giống 2 trường hợp đầu) 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 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 Master2Titlecon Click To phần tử X có cây 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 59 108 13 37 23 15 40 55 71 30 17
- Cài Click To Edit Master ường Key = x đặt thao tác xoá nút có trTitle Style 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; 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=T; if (T->Left==NULL) T = T->Right; else { if(T->Right==NULL) T=T->Left; else ThayThe1(p, T->Right);// tìm bên cây con p hả i } delete p; } } } else printf("Khong tim thay phan 18 xoa tu");} can
- Hàm tìm phầnEdit ế mạng Click To tử th 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; p=T; T=T->Right; } } 19
CÓ THỂ BẠN MUỐN DOWNLOAD
-
CÂY NHỊ PHÂN TÌM KIẾM CÂN BẰNG
15 p | 375 | 52
-
Bài giảng Cấu trúc dữ liệu và thuật toán - Chương 7: Cây
131 p | 127 | 20
-
Bài 2.3:Cây nhị phân tìm kiếm
42 p | 98 | 16
-
Bài giảng Cấu trúc dữ liệu và thuật toán - Chương 4: Cây nhị phân
40 p | 112 | 15
-
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 3: Cấu trúc cây
142 p | 74 | 10
-
Tài liệu hướng dẫn thực hành môn Cấu trúc dữ liệu và giải thuật - Bài 4: Cây nhị phân tìm kiếm
8 p | 103 | 10
-
Bài giảng Cấu trúc dữ liệu và thuật toán: Chương 4 - ThS. Phạn Nguyệt Thuần
76 p | 76 | 8
-
Bài giảng Cấu trúc dữ liệu - Chương 3: Cấu trúc cây
65 p | 58 | 6
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Cây nhị phân tìm kiếm
6 p | 103 | 6
-
Bài giảng Cấu trúc dữ liệu: Chương 5 - Cấu trúc dữ liệu cây
32 p | 86 | 4
-
Bài giảng Cấu trúc dữ liệu - Chương 7: Cây
146 p | 68 | 3
-
Bài giảng Cấu trúc dữ liệu và giải thuật – Bài 21: Cây nhị phân tìm kiếm
14 p | 42 | 3
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Cây nhị phân tìm kiếm - Nguyễn Mạnh Hiển (HKI năm 2020-2021)
26 p | 37 | 3
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Cây nhị phân tìm kiếm - Phan Mạnh Hiển (2020)
25 p | 40 | 2
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Cây nhị phân - Nguyễn Tri Tuấn
34 p | 30 | 2
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Cây nhị phân (tt) - Nguyễn Tri Tuấn
37 p | 30 | 2
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Cây nhị phân tìm kiếm - Nguyễn Mạnh Hiển
22 p | 67 | 1
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn