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 quét OCR, nội dung có thể không chính xác
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

Tiêu đề Cây nhị phân tìm kiếm (BST – Binary Search Tree)
Tác giả Nguyen Tri Tuan
Trường học Đại Học Khoa Học Tự Nhiên
Chuyên ngành Data Structure & Algorithm
Thể loại Bài giảng
Năm xuất bản 2004
Thành phố Tp.HCM
Định dạng
Số trang 17
Dung lượng 163,39 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Trang 1

Cây nhị phân tìm kiêm

(BST — Binary Search Tree)

!_ Ý nghĩa của cây BST

! 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

| Trac nghiém

Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT DH KHTN Tp.HCM 43

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 ?

mạnh của cả mảng và danh sách liên kêt

phân tử ?

Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT BH KHTN Tp.HCM 44

22

Trang 2

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:

| Tat 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

| Tat ca cac nut thudc cay con phai (p->pRight) déu co gia tri lén hon gia tri của p

Vq € p->pRight: gq->Data > p->Data

Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT DH KHTN Tp.HCM 45

Cây nhị phân tìm kiêm

Ví dụ

ẹ 22 ~~ ae 19 Cs) Gs») —

5 ề 1s

Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT DH KHTN Tp.HCM 46

Trang 3

Cây nhị phân tìm kiêm

Ví dụ

(b)

i 159 33 C143

Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT BH KHTN Tp.HCM

22

47

Cây nhị phân tìm kiêm

Mô tả câu trúc đữ liệu

phân

! Xem lai phan “Tổng quan về cây nhị phân

- Cách thức lưu trữ cây”

Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT BH KHTN Tp.HCM 48

24

Trang 4

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

| Cac thao tac trén cay BST:

!_ Tạo lập cây rỗng

| Kiém tra cây rỗng

| Tim kiém 1 phan ttr

| Thém 1 phan tir

! Xóa 1 phần tử

Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT DH 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

!_ Tạo lập cây rỗng:

voidd BSTCreate(BIN TREE &t)

{

t.Count = 0; /! Số nút trong cây t.pRoot = NULL; // Con trỏ đến nút gốc

Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT DH KHTN Tp.HCM 50

Trang 5

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 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT DH 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

| Vi du tim kiém phan tir 25:

Z4 40 NK

|| 24 36 | 75

\

30

Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT BH KHTN Tp.HCM 52

26

Trang 6

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

| Vi du tim kiém phan ttr “Nancy”:

<>

C Tem 2

Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT DH 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ử 31:

pRoot

wo)

Na

Ý

| |24 36 | 75

30 | | _——Í NUUU không tìm thay |

Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT BH KHTN Tp.HCM 54

Trang 7

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 I phân tử:

BT_NODE *BSTSearch(const BT_NODE *pCurr, int Key)

{

if (pCurr==NULL) return NULL; _// Khong tim thay

if (pCurr->Data==Key) return pCurr; // Tim thay else if (pCurr->Data > Key) // Tim trong cay con trai

return BSTSearch(pCurr->pLeft, Key);

else // Tim trong cay con phai return BSTSearch(pCurr->pRight, Key);

Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT DH 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

| Vi du thém phân tử “Frank”:

NULL, kết thúc tìm kiếm ở đây

Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT DH KHTN Tp.HCM 56

28

Trang 8

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

Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT DH 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

| Vi du thém phan tir 26:

pRoot

r40

|| 24 36 ,|75

\

NULL, kết thúc tim 30

kiêm ở đây

Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT BH KHTN Tp.HCM 58

Trang 9

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

| Vi du thém phan tir 26:

pRoot

„| 40 | -

x⁄ a

26 30

Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT BH 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

| Vi du thém phan tir 27:

pRoot

r40

\

không thêm nữa

Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT BH KHTN Tp.HCM 60

30

Trang 10

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 phan tir:

int BSTInsert(BT_NODE *&pCurr, int newKey)

{ if (pCurr==NULL) {

pCurr = new BT_NODE; // Tạo I nút mới

pCurr->Data = newKey; pCurr->pLeft = pCurr->pRight = NULL;

}

if (pCurr->Data > newKey) // Thém vao cay con trai

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 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT DH 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

!_ Thao tác xóa 1 phân tử:

| Ap dung 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:

I_ Xóa I nút không có nút con

I_ Xóa I nút có ] nút con

I_ Xóa Ï nút có 2 nút con

Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT DH KHTN Tp.HCM 62

Trang 11

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 |x

„ |40)| - I—>

J3J| (6s) /ến

4

= 25 70

25 70

Gán liên kết ở nút

cha thanh NULL

Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT DH KHTN Tp.HCM 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ó nút con phải)

x

30

liên kết = nút con phải

Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT DH KHTN Tp.HCM 64

Trang 12

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

! oa Ï nút chỉ có nút con phải:

#4 SN

+ *

Trước khi xóa pCurr Sau khi xóa pCurr

P->pLeft = pCurr->pRight;

delete pCurr;

Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT DH KHTN Tp.HCM 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 con trái) í lênkết=

nút con trái

5V 0Š» x2”

\ \

Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT DH KHTN Tp.HCM 66

Trang 13

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

I_ Xoá 1 nut chi có nút con trái:

pCurr Z¡

¢

Trước khi xóa pCurr Sau khi xóa pCurr

P->pRight = pCurr->pLeft;

delete pCurr;

Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT DH KHTN Tp.HCM 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)

L | 40),

J24|| | 136 ,|75 IE—>

4 25} | 70

%

30

Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT BH KHTN Tp.HCM 68

34

Trang 14

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ê 36

nhất trong cây con we / / | 32 6° N

\

30

Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT DH 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):

Cách 2: thay thê 65

\

30

Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT BH KHTN Tp.HCM 70

Trang 15

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 tim 1 phan tt thay thé p,

! ,.copy ndi dung cua p sang pCurr,

! .x6a nut p

| Phan tir thay thé p:

¡ là phần tử lớn nhất trong cây con bên trái; hoặc

¡ là phần tử nhỏ nhất trong cây con bên phải

phần tử p có nhiều nhất 1a 1 nut con

Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT DH 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; // Khong tìm thấy phần tử

if (pCurr->Data > Key) // X6a trén cay con trai

return BSTDelete(pCurr->pLeft, Key);

else if (pCurr->Data < Key) // X6a trên cây con phải

return BSTDelete(pCurr->pRight, Key);

// Tìm thấy nút cần xóa pCur Xóa ! _Delete(pCurr);

return 1;

Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT DH KHTN Tp.HCM 72

36

Trang 16

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

| X6a 1 phan tt (tt) :

void _Delete(BT_NODE *&pCurr)

{

BT_NODE *pTemp = pCurr;

if (pCurr->pRight==NULL) // Chi c6 1 nut con trái

pCurr = pCurr->pLeft; // Lưu lại nhánh con trái else if (pCurr->pLeft==NULL)

pCurr = pCurr->pRight; // Luu lai nhanh con phai

pTemp = _ SearchStandFor(pCurr->pLeft, pCurr);

delete pTemp;

}

Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT BH 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

I Xóa 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, pCurr);

// Tim thay phan tir thay thé

pCurr->Data = p->Data; // Copy dữ liệu của p vào pCurr

BT_NODE *pTemp = p;

}

Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT DH KHTN Tp.HCM 74

Trang 17

Cây nhị phân tìm kiêm

Các đánh giá

I Cây có N nút sẽ có độ cao trong khoảng từ

[log,(N+1)] dén N

| Trac nghiém: khi nao độ 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ự:

| C6 cing chi phi tim kiém O(log,N)

! Cay BST có chi phi thêm 1 phan tir O(log,N); mang c6

chi phi thém | phan tu O(N)

!_ Tương tự đối với thao tác xóa I phần tử

¡_ Cây BST tốn nhiều bộ nhớ lưu trữ hơn

Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT DH KHTN Tp.HCM 75

Cây nhị phân tìm kiêm

Trắc nghiệm

| Viet ham “Tim phan tir thay the: Phan tu nho

nhát trong cây con bên phải ”

! Bài tập #20

! Bài tập #22

! Bài tập #36

| Bai tap #31

Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT DH KHTN Tp.HCM 76

38

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

TỪ KHÓA LIÊN QUAN

w