1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Cây nhị phân tìm kiếm (BST – Binary Search Tree)

17 1,3K 4
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 17
Dung lượng 163,39 KB

Nội dung

22 Spring 2004Data Structure & Algorithm -Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 43 Cây nhị phân tìm kiếm (BST –Binary Search Tree) ! Ý nghĩa của cây BST ! Định nghĩa ! Ví dụ ! Mô tả cấu trúc dữ liệu ! Xây dựng các thao tác cơ bản trên cây ! Các đánh giá ! Trắc nghiệm Spring 2004Data Structure & Algorithm -Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 44 Cây nhị phân tìm kiếm Ý nghĩa của cây BST ! Điểm yếu và điểm mạnh của việc sử dụng mảng ? ! Điểm yếu và điểm mạnh của việc sử dụng danh sách liên kết ? ! Cần có 1 cấu trúc tổng hợp được điểm mạnh của cả mảng và danh sách liên kết. ! Trong cây nhị phân, chi phí để tìm kiếm 1 phần tử ? 23 Spring 2004Data Structure & Algorithm -Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 45 Cây nhị phân tìm kiếm Định nghĩa ! Cây nhị phân tìm kiếm là: ! Một cây nhị phân ! Mỗi nút p của cây đều thỏa: ! Tất cả các nút thuộc cây con trái (p->pLeft) đều có giá trị nhỏ hơn giá trị của p ∀q ∈ p->pLeft: q->Data < p->Data ! Tất cả các nút thuộc cây con phải (p->pRight) đều có giá trị lớn hơn giá trị của p ∀q ∈ p->pRight: q->Data > p->Data Spring 2004Data Structure & Algorithm -Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 46 Cây nhị phân tìm kiếm Vídụ 24 Spring 2004Data Structure & Algorithm -Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 47 Cây nhị phân tìm kiếm Vídụ Spring 2004Data Structure & Algorithm -Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 48 Cây nhị phân tìm kiếm Môtảcấu trúc dữ liệu ! Cách lưu trữ cây BST giống như cây nhị phân ! Xem lại phần “Tổng quan về cây nhị phân -Cách thức lưu trữ cây” 25 Spring 2004Data Structure & Algorithm -Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 49 Cây nhị phân tìm kiếm Xây dựng các thao tác cơ bản trên cây ! Các thao tác trên cây BST: ! Tạo lập cây rỗng ! Kiểm tra cây rỗng ! Tìm kiếm 1 phần tử ! Thêm 1 phần tử ! Xóa 1 phần tử Spring 2004Data Structure & Algorithm -Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 50 Cây nhị phân tìm kiếm Xây dựng các thao tác cơ bản trên cây ! Tạo lập cây rỗng: void BSTCreate(BIN_TREE &t) { t.Count = 0; // Số nút trong cây t.pRoot = NULL; // Con trỏ đến nút gốc } 26 Spring 2004Data Structure & Algorithm -Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 51 Cây nhị phân tìm kiếm Xây dựng các thao tác cơ bản trên cây ! Kiểm tra cây rỗng: int BSTIsEmpty(const BIN_TREE &t) { if (t.pRoot==NULL) return 1; return 0; } Spring 2004Data Structure & Algorithm -Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 52 Cây nhị phân tìm kiếm Xây dựng các thao tác cơ bản trên cây ! Ví dụ tìm kiếm phần tử 25: 40 65 32 24 36 30 254 70 75 pRoot 25 27 Spring 2004Data Structure & Algorithm -Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 53 Cây nhị phân tìm kiếm Xây dựng các thao tác cơ bản trên cây ! Ví dụ tìm kiếm phần tử “Nancy”: Jane TomBob Alan Ellen WendyNancyNancy Spring 2004Data Structure & Algorithm -Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 54 Cây nhị phân tìm kiếm Xây dựng các thao tác cơ bản trên cây ! Ví dụ tìm kiếm phần tử 31: 40 65 32 24 36 30 254 70 75 pRoot NULL, không tìm thấy 28 Spring 2004Data Structure & Algorithm -Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 55 Cây nhị phân tìm kiếm Xây dựng các thao tác cơ bản trên cây ! Tìm kiếm 1 phần tử: BT_NODE *BSTSearch(const BT_NODE *pCurr, int Key) { if (pCurr==NULL) return NULL; // Không tìm thấy if (pCurr->Data==Key) return pCurr; // Tìm thấy else if (pCurr->Data > Key) // Tìm trong cây con trái return BSTSearch(pCurr->pLeft, Key); else // Tìm trong cây con phải return BSTSearch(pCurr->pRight, Key); } Spring 2004Data Structure & Algorithm -Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 56 Cây nhị phân tìm kiếm Xây dựng các thao tác cơ bản trên cây ! Ví dụ thêm phần tử “Frank”: Jane TomBob Alan Ellen WendyNancy NULL, kết thúc tìm kiếm ở đây 29 Spring 2004Data Structure & Algorithm -Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 57 Cây nhị phân tìm kiếm Xây dựng các thao tác cơ bản trên cây Jane TomBob Alan Ellen WendyNancy Frank ! Ví dụ thêm phần tử “Frank”: Spring 2004Data Structure & Algorithm -Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 58 Cây nhị phân tìm kiếm Xây dựng các thao tác cơ bản trên cây 40 65 32 24 36 30 274 70 75 pRoot ! Ví dụ thêm phần tử 26: NULL, kết thúc tìm kiếm ở đây 30 Spring 2004Data Structure & Algorithm -Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 59 Cây nhị phân tìm kiếm Xây dựng các thao tác cơ bản trên cây 40 65 32 24 36 30 274 70 75 pRoot 26 ! Ví dụ thêm phần tử 26: Spring 2004Data Structure & Algorithm -Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 60 Cây nhị phân tìm kiếm Xây dựng các thao tác cơ bản trên cây 40 65 32 24 36 30 274 70 75 pRoot ! Ví dụ thêm phần tử 27: 27 Tìm thấy, không thêm nữa 31 Spring 2004Data Structure & Algorithm -Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 61 Cây nhị phân tìm kiếm Xây dựng các thao tác cơ bản trên cây ! Thêm 1 phần tử: int BSTInsert(BT_NODE *&pCurr, int newKey) { if (pCurr==NULL) { pCurr = new BT_NODE;// Tạo 1 nút mới pCurr->Data = newKey; pCurr->pLeft = pCurr->pRight = NULL; return 1;// Thêm thành công } if (pCurr->Data > newKey)// Thêm vào cây con trái return BSTInsert(pCurr->pLeft, newKey); else if (pCurr->Data < newKey)// Thêm vào cây con phải return BSTInsert(pCurr->pRight, newKey); else return 0;// Trùng khóa, không thêm nữa } Spring 2004Data Structure & Algorithm -Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 62 Cây nhị phân tìm kiếm Xây dựng các thao tác cơ bản trên cây ! Thao tác xóa 1 phần tử: ! Áp dụng giải thuật tìm kiếm để xác định nút chứa phần tử cần xóa ! Nếu tìm thấy, xóa phần tử đó khỏi cây ! Các trường hợp xảy ra: ! Xóa 1 nút không có nút con ! Xóa 1 nút có 1 nút con ! Xóa 1 nút có 2 nút con [...]... Tuan - Khoa CNTT ĐH KHTN Tp.HCM 68 34 Cây nhị phân tìm kiếm Xây dựng các thao tác cơ bản trên cây ! Xóa phần tử 40 (có 2 nút con): Cách 1: thay thế bằng phần tử lớn nhất trong cây con bên trái 36 40 65 32 24 4 75 36 25 70 30 Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 69 Cây nhị phân tìm kiếm Xây dựng các thao tác cơ bản trên cây ! Xóa phần tử 40 (có 2 nút con):... Tuan - Khoa CNTT ĐH KHTN Tp.HCM 64 32 Cây nhị phân tìm kiếm Xây dựng các thao tác cơ bản trên cây ! Xoá 1 nút chỉ có nút con phải: P P pCurr L L Trước khi xóa pCurr Sau khi xóa pCurr P->pLeft = pCurr->pRight; delete pCurr; Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM Spring 2004 65 Cây nhị phân tìm kiếm Xây dựng các thao tác cơ bản trên cây ! Ví dụ xóa phần tử 75 (chỉ có nút... Tuan - Khoa CNTT ĐH KHTN Tp.HCM 66 33 Cây nhị phân tìm kiếm Xây dựng các thao tác cơ bản trên cây Xoá 1 nút chỉ có nút con trái: ! P P pCurr L L Trước khi xóa pCurr Sau khi xóa pCurr P->pRight = pCurr->pLeft; delete pCurr; Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM Spring 2004 67 Cây nhị phân tìm kiếm Xây dựng các thao tác cơ bản trên cây Ví dụ xóa phần tử 40 (có 2 nút con).. .Cây nhị phân tìm kiếm Xây dựng các thao tác cơ bản trên cây ! Ví dụ xóa phần tử 4 (không có nút con) 40 40 65 32 24 4 36 25 65 32 75 24 70 36 25 Gán liên kết ở nút cha thành NULL 30 75 70 30 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM Spring 2004 63 Cây nhị phân tìm kiếm Xây dựng các thao tác cơ bản trên cây ! Ví dụ xóa phần tử 25 (chỉ có... con pTemp = _SearchStandFor(pCurr->pLeft, pCurr); delete pTemp; } Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 73 Cây nhị phân tìm kiếm Xây dựng các thao tác cơ bản trên cây ! Xóa 1 phần tử (tt)…: // Tìm phần tử thay thế: “Phần tử lớn nhất trong cây con bên trái” BT_NODE * _SearchStandFor(BT_NODE *&p, BT_NODE *pCurr) { if (p->pRight != NULL) return _SearchStandFor(p->pRight,... nào độ cao của cây nhỏ nhất ? Lớn nhất ? So sánh giữa cây BST với mảng được sắp thứ tự: ! ! ! ! Spring 2004 Có cùng chi phí tìm kiếm O(log2N) Cây BST có chi phí thêm 1 phần tử O(log2N); mảng có chi phí thêm 1 phần tử O(N) Tương tự đối với thao tác xóa 1 phần tử Cây BST tốn nhiều bộ nhớ lưu trữ hơn Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 75 Cây nhị phân tìm kiếm Trắc nghiệm... trong cây con bên phải 65 40 65 32 24 4 75 36 25 70 30 Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 70 35 Cây nhị phân tìm kiếm Xây dựng các thao tác cơ bản trên cây ! Xóa 1 phần tử pCurr có 2 nút con: ! ! ! ! ! Thay vì xóa trực tiếp nút pCurr… …ta tìm 1 phần tử thay thế p, …copy nội dung của p sang pCurr, …xóa nút p Phần tử thay thế p: là phần tử lớn nhất trong cây. .. …là phần tử nhỏ nhất trong cây con bên phải à phần tử p có nhiều nhất là 1 nút con ! Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 71 Cây nhị phân tìm kiếm Xây dựng các thao tác cơ bản trên cây ! Xóa 1 phần tử: int BSTDelete(BT_NODE *&pCurr, int Key) { if (pCurr==NULL) return 0; // Không tìm thấy phần tử if (pCurr->Data > Key) // Xóa trên cây con trái return BSTDelete(pCurr->pLeft,... BSTDelete(pCurr->pLeft, Key); else if (pCurr->Data < Key) // Xóa trên cây con phải return BSTDelete(pCurr->pRight, Key); // Tìm thấy nút cần xóa pCurr à Xóa ! _Delete(pCurr); return 1; } Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 72 36 Cây nhị phân tìm kiếm Xây dựng các thao tác cơ bản trên cây ! Xóa 1 phần tử (tt)…: void _Delete(BT_NODE *&pCurr) { BT_NODE *pTemp... NULL) return _SearchStandFor(p->pRight, pCurr); // Tìm thấy phần tử thay thế… pCurr->Data = p->Data; // Copy dữ liệu của p vào pCurr BT_NODE *pTemp = p; p = p->pLeft; // Lưu lại nhánh con trái return pTemp; // Xóa phần tử thay thế } Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 74 37 Cây nhị phân tìm kiếm Các đánh giá ! Cây có N nút sẽ có độ cao trong khoảng từ [log2(N+1)] . Cây nhị phân tìm kiếm Môtảcấu trúc dữ liệu ! Cách lưu trữ cây BST giống như cây nhị phân ! Xem lại phần “Tổng quan về cây nhị phân -Cách thức lưu trữ cây . 45 Cây nhị phân tìm kiếm Định nghĩa ! Cây nhị phân tìm kiếm là: ! Một cây nhị phân ! Mỗi nút p của cây đều thỏa: ! Tất cả các nút thuộc cây con trái (p->pLeft)

Ngày đăng: 26/10/2013, 00:20

TỪ KHÓA LIÊN QUAN

w