Cấu trúc dữ liệu và giải thuật-Cây nhị phân và tìm kiếm
lượt xem 43
download
• 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
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Cấu trúc dữ liệu và giải thuật-Cây nhị phân và tìm kiếm
- Generated by Foxit PDF Creator © Foxit Software http://www.foxitsoftware.com For evaluation only. NỘI DUNG Click To Edit Master Title Style Cấu trúc dữ liệu và thuật giải CÂY NHỊ PHÂN TÌM KIẾM CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT 1 1
- Generated by Foxit PDF Creator © Foxit Software http://www.foxitsoftware.com For evaluation only. Ðịnh nghĩa cây nhị phân tìm Title Click To Edit Master 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 CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT 1 Ví dụ: 18 13 37 15 23 40 2
- Generated by Foxit PDF Creator © Foxit Software http://www.foxitsoftware.com For evaluation only. ƯuClick của cây nhị phân tìm kiếm điểm To 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
- Generated by Foxit PDF Creator © Foxit Software http://www.foxitsoftware.com For evaluation only. Cấu trúc dữ liệu của cây nhị Title tìm kiếm Click To 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
- Generated by Foxit PDF Creator © Foxit Software http://www.foxitsoftware.com For evaluation only. Các thao tác trên cây nhị phân tìm Style Click 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
- Generated by Foxit PDF Creator © Foxit Software http://www.foxitsoftware.com For evaluation only. 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
- Generated by Foxit PDF Creator © Foxit Software http://www.foxitsoftware.com For evaluation only. Tạo 1 nút ToKey bằng x Click có Edit 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
- Generated by Foxit PDF Creator © Foxit Software http://www.foxitsoftware.com For evaluation only. 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
- Generated by Foxit PDF Creator © Foxit Software http://www.foxitsoftware.com For evaluation only. Click To Edit Master Title Style Minh họa thêm 1 phần tử vào cây 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
- Generated by Foxit PDF Creator © Foxit Software http://www.foxitsoftware.com For evaluation only. TìmClick To Edit Master dùng đệ quy) nút có khoá bằng x (không Title Style 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
- Generated by Foxit PDF Creator © Foxit Software http://www.foxitsoftware.com For evaluation only. Click To Edit Master Title Style Tìm nút có khoá bằng x (dùng đệ quy) 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
- Generated by Foxit PDF Creator © Foxit Software http://www.foxitsoftware.com For evaluation only. 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
- Generated by Foxit PDF Creator © Foxit Software http://www.foxitsoftware.com For evaluation only. 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 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
- Generated by Foxit PDF Creator © Foxit Software http://www.foxitsoftware.com For evaluation only. 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 đ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
- Generated by Foxit PDF Creator © Foxit Software http://www.foxitsoftware.com For evaluation only. Minh hoạ hủy Edit Master Title Style Click To phần tử x có 1 cây con 44 Hủy X=37 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
- Generated by Foxit PDF Creator © Foxit Software http://www.foxitsoftware.com For evaluation only. 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ì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 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 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
- Generated by Foxit PDF Creator © Foxit Software http://www.foxitsoftware.com For evaluation only. 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 13 37 108 23 15 40 55 71 30 17
- Generated by Foxit PDF Creator © Foxit Software http://www.foxitsoftware.com For evaluation only. CàiClick Totác xoá nút có trường Style 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; 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 phải } delete p; } } } else printf("Khong tim thay phan 18 xoa tu");} can
- Generated by Foxit PDF Creator © Foxit Software http://www.foxitsoftware.com For evaluation only. Hàm tìm phầnEdit Master Click To tử thế mạng 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ẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT - CHƯƠNG 7: CÂY NHỊ PHÂN TÌM KIẾM
19 p | 147 | 20
-
Bài tập Cấu trúc dữ liệu và giải thuật
16 p | 228 | 18
-
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT - CHƯƠNG 6: CÂY VÀ CÂY NHỊ PHÂN
14 p | 176 | 15
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 6 - ThS. Trịnh Quốc Sơn (ĐH Công nghệ Thông tin)
14 p | 97 | 11
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 3 - ThS. Trịnh Quốc Sơn (ĐH Công nghệ Thông tin)
13 p | 70 | 9
-
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 1: Các khái niệm cơ bản về Cấu trúc dữ liệu và giải thuật
20 p | 46 | 8
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Bảng băm - Phan Mạnh Hiển (2020)
16 p | 41 | 4
-
Bài giảng Cấu trúc dữ liệu và giải thuật – Chương 1: Tổng quan về giải thuật và cấu trúc dữ liệu
10 p | 66 | 4
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Bài 4 - Hoàng Thị Điệp (2014)
11 p | 61 | 4
-
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 1: Một số khái niệm cơ bản về cấu trúc dữ liệu và giải thuật
12 p | 91 | 4
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Tổng quan - Nguyễn Đức Cương
6 p | 99 | 4
-
Bài giảng Cấu trúc dữ liệu và giải thuật trong C++ - Bài 9: Cấu trúc dữ liệu hàng đợi
12 p | 52 | 4
-
Đề cương chi tiết học phần Cấu trúc dữ liệu và giải thuật (Data structures and algorithms)
10 p | 42 | 3
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Bảng băm - Nguyễn Mạnh Hiển
16 p | 66 | 3
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 1 - Ngô Công Thắng
20 p | 62 | 3
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Vector - Phan Mạnh Hiển (2020)
20 p | 45 | 2
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Giới thiệu môn học - Đỗ Ngọc Như Loan
6 p | 51 | 1
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Bài 1a - Hoàng Thị Điệp (2014)
12 p | 58 | 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