1. Trang chủ
  2. » Giáo án - Bài giảng

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

18 1,2K 5
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 Tìm Kiếm Nhị Phân
Tác giả Nguyễn Việt Huỳnh Mai
Người hướng dẫn PGS.TS Lê Khắc Thành
Trường học Trường ĐHSP Hà Nội
Chuyên ngành Cấu Trúc Dữ Liệu
Thể loại Bài giảng
Năm xuất bản CHK15
Thành phố Hà Nội
Định dạng
Số trang 18
Dung lượng 615,5 KB

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

Nội dung

TRƯỜNG ĐHSP HÀ NỘILỚP CHK15 – KHOA CNTT CẤU TRÚC DỮ LIỆUBÀI GIẢNG MÔN CÂY TÌM KIẾM NHỊ PHÂN KHÁI NIỆM TÌM KIẾM THÊM XOÁ GIẢNG VIÊN HƯỚNG DẪN PGS.TS LÊ KHẮC THÀNH NGUYỄN VIỆT HUỲNH MAIHỌC

Trang 1

TRƯỜNG ĐHSP HÀ NỘI

LỚP CHK15 – KHOA CNTT CẤU TRÚC DỮ LIỆUBÀI GIẢNG MÔN

CÂY TÌM KIẾM NHỊ PHÂN

KHÁI NIỆM

TÌM KIẾM THÊM XOÁ

GIẢNG VIÊN HƯỚNG DẪN

PGS.TS LÊ KHẮC THÀNH NGUYỄN VIỆT HUỲNH MAIHỌC VIÊN THỰC HIỆN

DUYỆT

Trang 2

KHÁI NIỆM

1.CÂY

Cây là một tập hữu hạn các nút, trong đó có một nút đặc biệt gọi là gốc (root) Giữa các nút có một quan hệ phân cấp gọi là “quan hệ cha con”

Cây nhị phân là cây có thứ tự và có đặc điểm mọi nút trên cây có tối đa 2 con:

 Cây con trái  Cây con phải

Trang 3

KHÁI NIỆM(tt)

3 CÂY TÌM KIẾM NHỊ PHÂN

- Cây tìm kiếm nhị phân được tổ chức theo một cây nhị phân

- Cây tìm kiếm nhị phân có thể được biểu diễn bởi một cấu trúc dữ liệu nối kết

- Ngoài một trường key, mỗi nút chứa một trường left, right và p trỏ đến các nút tương ứng với con trái, con phải và cha của nó Nếu thiếu một con hoặc cha trường thích hợp sẽ chứa giá trị NIL Nút gốc là nút duy nhất trong cây có trường cha là NIL

- Các khoá trong cây tìm kiếm nhị phân được lưu trữ theo tính chất sau:

- Cho x là một nút trong cây tìm kiếm nhị phân Nếu y là một nút trong cây con trái của x, thì key[y] ≤ key[x] Nếu y là một nút trong cây con phải của x, thì key[x] ≤ key[y]

Trang 4

KHÁI NIỆM(tt)

4 VÍ DỤ CÂY TÌM KIẾM NHỊ PHÂN

Chọn nút số 4 làm nút gốc

Các nút con là 1 0 4 5 8 10 Chọn nút số 0 làm nút gốcCác nút con là 1 5 4 4 8 10

Trang 5

DUYỆT CÂY

1 Duyệt theo thứ tự trước (NODE-LEFT-RIGHT)

NLR_TREE(x)

1 IF X<>NIL THEN

2 PRINT key(x)

3 NLR_TREE(Left[x])

4 NLR_TREE(Right[x])

0

1

4

4

5

10 8

4

Kết quả duyệt: 4

1

1

0

0

4

4

5

5

8

8

10

10

Ý tưởng:

Thăm nút gốc sau đó thăm các nút

của cây con trái rồi đến cây con phải

Trang 6

DUYỆT CÂY

2 Duyệt theo thứ tự giữa (LEFT-NODE-RIGHT)

LNR_TREE(x)

1 IF X<>NIL THEN

2 LNR_TREE(Left[x])

3 PRINT key(x)

4 LNR_TREE(Right[x])

0

1

4

4

5

10 8

4

1

1

0

0

4

4

5

5

8

8

10

10

Ý tưởng:

Thăm các nút của cây con trái sau đó

thăm nút gốc rồi đến cây con phải

Trang 7

DUYỆT CÂY

3 Duyệt theo thứ tự sau (LEFT- RIGHT- NODE)

LRN_TREE(x)

1 IF X<>NIL THEN

2 LRN_TREE(Left[x])

3 LRN_TREE(Right[x])

4 PRINT key(x)

0

1

4

4

5

10 8

4

1

1

0

0

4

4

5

5

8

8

10

10

Ý tưởng:

Thăm các nút của cây con trái sau đó

thăm đến cây con phải rồi đến nút gốc

Trang 8

TÌM KIẾM TRÊN CÂY

SEARCHNODE(x,k)

1 While x<>NIL và k<>key[x]

2 Do if k<key[x] then

4 else

6 return x

13

18

44

37

88

71 99

Ý tưởng:

Cho một biến trỏ đến gốc của cây và một khoá k Thủ tục tìm

kiếm SEARCHNODE trả về một biến trỏ đến một nút có khoá k nếu như nó tồn tại, nếu không nó trỏ về NIL

15

59 55

Ví dụ: Tìm nút có khoá 55

So sánh 55 với nút gốc

55 > 44

55 < 88

55 < 59

55 = 55

Đã tìm thấy !

Trang 9

THÊM NÚT VÀO CÂY

1. Ý tưởng:

- Khi thêm một giá trị mới v vào một cây tìm kiếm nhị phân T,

ta dùng thủ tục TREE-INSERT

- Thủ tục TREE-INSERT được truyền qua một nút z , với

key[z]=v, left[z]=NIL, và right[z]=NIL Thủ tục sửa đổi T và vài trường của z theo cách thức mà z được truyền vào một vị trí thích hợp trong cây

- Thủ tục TREE-INSERT bắt đầu tại nút gốc của cây và lần theo một lộ trình đi xuống Biến trỏ x lần theo lộ trình, và biến trỏ y được duy trì dưới dạng cha của x Sau khi khởi tạo dòng lặp while trong các dòng 3-7 sẽ khiến hai biến trỏ này dời xuống, đi theo con trái hay phải tùy thuộc vào phép so sánh của key[z] với key[x], cho đến khi x được ấn định là NIL NIL là vị trí ở đó ta muốn đặt mục đầu vào z Các dòng 8-13 ấn định các biến trỏ khiến z được chèn

Trang 10

THÊM NÚT VÀO CÂY (tt)

TREE-INSERT(T,z)

3 while x <> NIL

6 then x :=left[x]

10 then root[T]:= z

12 then left[y]:=z

13 else right[y]:=z

Trang 11

THÊM NÚT VÀO CÂY (tt)

13

18

44

37

88

71 99

Ví dụ:

Thêm vào cây T một nút z, với key[z]=12, left[z]=NIL,

right[z]=NIL

15

59 55

12

Nút Z

x

Bắt đầu tại nút gốc, con trỏ x đi xuống, con trỏ y duy trì dạng cha của x

Trang 12

XOÁ NÚT TRÊN CÂY TKNP

1 PHẦN TỬ KẾ VỊ

Nếu tất cả các khóa điều riêng biệt, phần tử kế vị của nút

x là nút có khóa nhỏ nhất lớn hơn key[x] thủ tục dưới đây trả về phần tử kế vị của một nút x trong một cây tìm kiếm nhị phân nếu nó tồn tại, và NIL nếu x có khóa lớn nhất trong cây

TREE-SUCCESSOR(x)

1 if right[x] <> NIL

3 else y:= p[x]

4 while y <> NIL và x=right[y]

5 do x:=y

6 y:=p[y]

7 return y

Trang 13

XOÁ NÚT TRÊN CÂY TKNP (tt)

13

18

44

37

88

71

99

15

59 55

Ví dụ với cây bên dưới:

Phần tử kế vị của nút có khóa 40 là nút có khóa 44

Phần tử kế vị của nút có khóa 44 là nút có khóa 55

Trang 14

XOÁ NÚT TRÊN CÂY TKNP (tt)

2 XÓA NÚT TRÊN CÂY

Thủ tục để xóa một nút z đã cho ra khỏi cây tìm kiếm nhị phân chấp nhận một biến trỏ đến z dưới dạng một đối số Thủ tục xét ba trường hợp:

- Nếu z không có các con, ta sửa đổi cha của nó là p[z] bằng NIL

- Nếu nút chỉ có một con đơn lẻ, ta "nối khử" z bằng cách tạo một nối kết mới giữa con của nó và cha của nó

- Nếu nút có hai con, ta nối khử phần tử kế vị y của z, không có con trái và thay nội dung của z bằng nội dung của y

Trang 15

1.if left[z]=NIL or right[z]=NIL

2 then y:=z

3 else y:= TREE-SUCCESSOR(z)

4.if left[y]<> NIL

5 then x := left[y]

6 else x:= right[y]

7.if x <> NIL

8 then p[x] := p[y]

9.if p[y]=NIL

10 then root[T] :=x

14.if y<> z

15 then key[z] :=key[y]

16.return y

XOÁ NÚT TRÊN CÂY TKNP (tt)

1-3 xác định nút y để khử 4-6 ấn định x dựa trên y

7-13 nối khử y bằng cách sửa đổi các biến trỏ trong p[y] và x

14-16 nội dung của z được dời từ y sang z

Trang 16

XOÁ NÚT TRÊN CÂY TKNP (tt)

13

18

44

37

88

71 99

1 TRƯỜNG HỢP Z KHÔNG CÓ NÚT CON

15

59

55

Nút 15 đã được xoá!

Trang 17

XOÁ NÚT TRÊN CÂY TKNP(tt)

13

18

44

37

88

2 TRƯỜNG HỢP Z CÓ 1 NÚT

15

Z

Nút 88 đã được xoá!

71 55

93

Trang 18

XOÁ NÚT TRÊN CÂY TKNP (tt)

13

18

44

37

88

3 TRƯỜNG HỢP Z CÓ ĐỦ 2 NÚT CON

29

Z

Nút 18 đã được xoá!

71 55

93

25

y

Ngày đăng: 05/06/2013, 01:26

TỪ KHÓA LIÊN QUAN

w