Tải bản đầy đủ (.docx) (79 trang)

Cấu trúc dữ liệu cây đỏ đen và mô phỏng

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.37 MB, 79 trang )

ĐẠI HỌC ĐÀ NẴNG
TRƯỜNG ĐẠI HỌC SƯ PHẠM
KHOA TIN HỌC

KHÓA LUẬN TỐT NGHIỆP
Đê tài:

CẤU TRÚC DỮ LIỆU CÂY ĐỎ ĐEN
VÀ MÔ PHỎNG

Giáo viên hướng
dẫn Sinh viên thực
hiện Lớp

: PGS.TSKH. Trần Quốc Chiến
: Phan Thị Như Ngọc
: 08SPT

Đà Nẵng - 5/ 2012


LỜI CẢM ƠN
Trước khi trình bày đề tài, em xin bày tỏ lòng biết
ơn chân thành đến tất cả các thầy cô trong khoa Tin học,
đặc biệt PGS. TSKH. Trần Quốc Chiến trong thời gian
qua đã tận tâm giảng dạy, hướng dẫn tạo mọi điều kiện
thuận lợi để em hoàn thành đề tài này.
Em cũng xin thành thật cảm ơn những người thân,
bạn bè đã động viên, giúp đỡ trong thời gian xây dựng
đề tài.
Chân thành cảm ơn!!



Sinh viên thực hiện
Phan Thị Như Ngọc


Ý KIẾN ĐÁNH GIÁ CỦA GIÁO VIÊN HƯỚNG DẪN
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................

Đà Nẵng, ngày tháng năm
2012
Giáo viên hướng dẫn

PGS-TSKH Trần Quốc Chiến


MỤC LỤC
LỜI CẢM ƠN
Ý KIẾN ĐÁNH GIÁ CỦA GIÁO VIÊN HƯỚNG DẪN


MỤC LỤC
LỜI MỞ ĐẦU...........................................................................................................................7
I. LÍ DO CHỌN ĐỀ TÀI:...................................................................................................7
II. MỤC TIÊU NHIỆM VỤ:..............................................................................................8
III. PHƯƠNG PHÁP NGHIÊN CỨU:.............................................................................8
IV. BỐ CỤC CỦA ĐỀ TÀI:................................................................................................9
CHƯƠNG I: TỔNG QUAN VỀ CẤU TRÚC CÂY..........................................................10
I. CẤU TRÚC CÂY:..........................................................................................................10
1. ĐỊNH NGHĨA VÀ CÁC KHÁI NIỆM VỀ CÂY:.................................................10
2. SƠ ĐỒ CẤU TRÚC CÂY:........................................................................................11
3. ỨNG DỤNG CẤU TRÚC CÂY:..............................................................................12
4. MỘT SỐ VÍ DỤ VỀ ĐỐI TƯỢNG CÁC CẤU TRÚC DẠNG CÂY:................12
4.1. Sơ đồ tổ chức của một công ty:........................................................................12
4.2. Mục lục một quyển sách:..................................................................................13
4.3. Biểu diễn biểu thức số học dưới dạng cây: x + y * (z - t) + u / v...................13
5. NHẬN XÉT:...............................................................................................................14
II. TÌM HIỂU CÂY NHỊ PHÂN :...................................................................................14
1. ĐỊNH NGHĨA :..........................................................................................................14
2. MỘT SỐ DẠNG ĐẶC BIỆT CỦA CÂY NHỊ PHÂN :........................................14
3. TÍNH CHẤT :............................................................................................................16
CHƯƠNG II: CÂY NHỊ PHÂN TÌM KIẾM.....................................................................17
I. MỘT SỐ KHÁI NIỆM:................................................................................................17
II. SƠ ĐỒ CÂY NHỊ PHÂN TÌM KIẾM:......................................................................17
III. CẤU TRÚC DỮ LIỆU:..............................................................................................18
IV. CÁC THAO TÁC TRÊN CÂY NHỊ PHÂN TÌM KIẾM:.....................................18
1. Khởi tạo cây Binary Search Tree:...........................................................................18
1.1. Khởi tạo cây Binary Search Tree:....................................................................18


1.2. Tạo Node:............................................................................................................18

1.3. Tạo cây nhị phân tìm kiếm:..............................................................................19
2. Duyệt cây nhị phân tìm kiếm:.................................................................................20
2.1. Duyệt theo thứ tự trước (Node - Left - Right):..............................................20
2.2. Duyệt theo thứ tự giữa (Left - Node - Right):................................................21
2.3. Duyệt theo thứ tự sau (Left - Right - Node):..................................................21
3. Tìm một phần tử x trong cây:..................................................................................22



Giải thuật tìm kiếm:..............................................................................................22



Nhận xét:.................................................................................................................22
3.1. Tìm theo đệ quy:.................................................................................................24
3.2. Tìm theo không đệ quy:.....................................................................................25
3.3. Thêm một nút vào cây Binary Search Tree:...................................................25
3.4. Nhận xét:.............................................................................................................27
4. Hủy một phần tử có khóa X:...................................................................................27
4.1. Trường hợp 1: X là nút lá.................................................................................27
4.2. Trường hợp 2: X chỉ có một con (bên trái hoặc bên phải)...........................28
4.3. Trường hợp 3: X có đủ hai con.........................................................................29
5. Hủy toàn bộ cây nhị phân tìm kiếm:......................................................................32
V. NHẬN XÉT:...................................................................................................................33
CHƯƠNG III: CÂY ĐỎ ĐEN.............................................................................................34
I. GIỚI THIỆU:.................................................................................................................34
II. ĐỊNH NGHĨA:..............................................................................................................34
III. TÍNH CHẤT:...............................................................................................................35
IV. THUẬN LỢI KHI SỬ DỤNG:..................................................................................36
V. CẤU TRÚC CÂY ĐỎ ĐEN:........................................................................................38

1. Cấu trúc lưu trữ:.......................................................................................................38
2. Khai báo cây đỏ đen:.................................................................................................38
VI. CÁC THUẬT TOÁN CƠ BẢN CỦA BLACK AND RED TREE:.......................39
1. Phép quay:..................................................................................................................39
2. Thêm một node mới:.................................................................................................39
2.1. Các phép lật màu trên đường đi xuống:.........................................................41
2.2. Các phép quay khi chèn node:.........................................................................42


2.3. Các thao tác khôi phục cây:..............................................................................49
2.4. Các trường hợp vi phạm chính:.......................................................................50
2.4.1. Trường hợp 1: 50
2.4.2. Trường hợp 2: 51
2.4.3. Trường hợp 3: 52
2.5. Nhận xét khi chèn:.............................................................................................53
2.6. Code:....................................................................................................................54
3. Xóa một node:............................................................................................................57
3.1. Trường hợp 1:.....................................................................................................58
3.2. Trường hợp 2:.....................................................................................................58
3.3. Trường hợp 3:.....................................................................................................59
3.4. Trường hợp 4:.....................................................................................................59
4. Tìm kiếm:....................................................................................................................61
I. GIỚI THIỆU NGÔN NGỮ LẬP TRÌNH:................................................................64
1. Vài nét về ngôn ngữ Java:........................................................................................64
2. Một số đặc điểm của ngôn ngữ Java:.....................................................................64
3. Giới thiệu ứng dụng của Java vào chương trình cây đỏ đen:.............................65
II. DEMO CHƯƠNG TRÌNH:........................................................................................66
KẾT LUẬN.............................................................................................................................68
TÀI LIỆU THAM KHẢO....................................................................................................69



LỜI MỞ ĐẦU
I. LÍ DO CHỌN ĐỀ TÀI:
Trong khoa học máy tính, cấu trúc dữ liệu là một cách lưu dữ liệu
trong máy tính sao cho nó có thể sử dụng một cách hiệu quả. Một cấu
trúc dữ liệu được thiết kế tốt cho phép thực hiện nhiều phép toán, sử
dụng càng ít tài nguyên, thời gian xử lý và không gian bộ nhớ tốt.
Chúng ta đều biết việc tìm kiếm là một đòi hỏi rất thường xuyên
trong đời sống hằng ngày cũng như trong xử lý Tin học. Vấn đề tìm kiếm
xét một cách tổng quát, có thể hiểu là tìm một đối tượng thỏa mãn một số
đòi hỏi nào đó, trong một tập rộng lớn các đối tượng. Khi không liên quan
đến mục đích xử lý cụ thể nào khác, bài toán tìm kiếm có thể được phát
biểu độc lập và tổng quát như sau:
“Cho một bảng gồm n bản ghi R1, R2,…, Rn. Mỗi bản ghi Ri (1≤i≤n)
tương ứng với một khóa k i. Hãy tìm bản ghi có giá trị khóa tương ứng
bằng X cho trước”.
X được gọi là khóa tìm kiếm. Công việc tìm kiếm sẽ được hoàn
thành khi có một trong hai tình huống sau đây xảy ra:
1.

Tìm được bản ghi có giá trị khóa tương ứng bằng X, lúc đó

ta nói phép tìm kiếm thành công (successfull).
2.

Không tìm thấy được bản ghi nào có giá trị khóa bằng X.

Phép tìm kiếm không thành công (unsuccessfull). Sau một phép tìm kiếm
không thỏa có khi xuất hiện yêu cầu bổ sung thêm bản ghi mới có khóa
bằng X vào bảng. Giải thuật thể hiện cả yêu cầu này được gọi là giải

thuật “tìm kiếm có bổ sung”.
Có nhiều phương pháp tìm kiếm cơ bản và thông dụng, đối với dữ
liệu ở bộ nhớ trong là tìm kiếm trong, đối với dữ liệu ở bộ nhớ ngoài là
tìm kiếm ngoài. Đối với tìm kiếm trong, tìm kiếm nhị phân là phương pháp


tìm kiếm khá thông dụng, chi phí ít, đạt kết quả tốt. Tuy nhiên khi sử dụng
tìm kiếm nhị phân dãy khoá đã phải được sắp xếp rồi, nghĩa là thời gian
chi phí cho sắp xếp cũng phải kể đến. Nếu dãy khoá luôn biến động thì
lúc đó chi phí cho sắp xếp lại nổi lên rất rõ và chính điều ấy bộc lộ nhược
điểm của phương pháp này.
Để khắc phục nhược điểm vừa nêu trên đối với tìm kiếm nhị phân và
đáp ứng yêu cầu tìm kiếm đối với bảng biến động, một phương pháp mới
được hình thành dựa trên cơ sở bảng được tổ chức dưới dạng cây nhị
phân mà ta gọi là cây nhị phân tìm kiếm.
Trong đó, cây đỏ đen là một trong những cấu trúc dữ liệu hay, cùng
với cây tìm kiếm nhị phân là những cấu trúc dữ liệu có điểm mạnh trong
việc lưu trữ và tìm kiếm dữ liệu. Song cây đỏ đen có những đặc tính riêng
mà nhờ đó nó đã làm nổi bật những điểm mạnh của mình. Thuật toán
quan trọng trong cây cân bằng. Trên cơ sở đó với sự định hướng của
thầy giáo hướng dẫn PGS-TSKH Trần Quốc Chiến em đã chọn đề tài

“Cấu trúc dữ liệu cây đỏ đen và mô phỏng ”.
II.
-

MỤC TIÊU NHIỆM VỤ:
Đề tài nhằm nghiên cứu lý thuyết về cây đỏ đen, một dạng cây nhị

phân tìm kiếm tự cân bằng để thấy được những điểm mạnh của kiểu cấu

trúc dữ liệu này.
-

Đề tài nhằm khẳng định làm rõ những khái niệm, tính chất và việc

sử dụng cấu trúc dữ liệu cây đỏ đen vào việc lưu trữ dữ liệu và thực hiện
tìm kiếm trong bài toán tìm kiếm.
-

Thực hiện nghiên cứu và mô phỏng các phép toán chèn, xóa, tìm

kiếm trên cây đỏ đen, đánh giá chúng so với cây nhị phân tìm kiếm.

III. PHƯƠNG PHÁP NGHIÊN CỨU:
-

Tham khảo các tài liệu, bài viết, giáo trình có liên quan đến cấu

trúc cây, cây nhị phân tìm kiếm, cây đỏ đen, tài liệu trên mạng.


-

Sử dụng các ngôn ngữ như lập trình hướng đối tượng…để xây

dựng các bước mô phỏng các thuật toán trên cây đỏ đen.

IV. BỐ CỤC CỦA ĐỀ TÀI:
LỜI MỞ ĐẦU
Báo cáo được chia thành 4 chương:

Chương I: Tổng quan về cấu trúc cây.
Chương này giới thiệu tổng quan về cấu trúc cây, khái niệm và
các tính chất cây, cây nhị phân
Chương II: Cây nhị phân tìm kiếm.
Chương này trình bày về cây tìm kiếm nhị phân bao gồm: định
nghĩa, các giải thuật tìm kiếm, các thao tác chèn và xóa trên cây nhị
phân tìm kiếm, đánh giá về thời gian, độ phức tạp của các thao tác này.
Chương III: Cây đỏ đen.
Chương này trình bày khái niệm, tính chất cây đỏ đen, các
phép toán chèn, xóa, tìm kiếm trên cây đỏ đen, đánh giá về thời gian,
độ phức tạp của các phép toán này, những thuận lợi khi sử dụng cấu
trúc cây đỏ đen.
Chương IV: Cài đặt chương trình.
KẾT LUẬN
TÀI LIỆU THAM KHẢO


CHƯƠNG I: TỔNG QUAN VỀ CẤU TRÚC CÂY
I. CẤU TRÚC CÂY:
1. ĐỊNH NGHĨA VÀ CÁC KHÁI NIỆM VỀ CÂY:
-Cây là một đồ thị liên thông và không có chu trình đơn.
-

Cây đã được dùng từ năm 1857, khi nhà toán học Anh tên Arthur

Cayley dùng cây để xác định những dạng khác nhau của hợp chất hóa
học. Từ đó, cây đã được dùng để giải nhiều bài toán trong nhiều lĩnh vực
khác nhau trong đó cây rất hay sử dụng trong Tin học.
-


Cây là một tập hợp T các phần tử (gọi là nút của cây) trong đó có

một nút đặc biệt gọi là nút gốc (root), các nút còn lại được chia thành
những tập rời nhau T1, T2, …, Tn theo quan hệ phân cấp trong đó T i cũng
được gọi là một cây. Mỗi nút ở cấp i sẽ quản lý một số nút ở cấp i +1.
Quan hệ này người ta còn gọi là quan hệ cha - con.
-

Gốc của cây là một đỉnh đặc biệt, thông thường là đỉnh trên cùng.

Mức của đỉnh là độ dài đường đi từ gốc đến đỉnh đó. Chiều cao của cây
là số mức lớn nhất của nút có trên cây đó.
-Mức (gốc (T))=0.
* Ví dụ : Đồ thị sau là cây

V
V

V
+

V

V

V

V

Ta chọn V1 là gốc có mức 0 thì V2, V3 là những đỉnh mức 1, các


đỉnhV4, V5, V6, V7 có mức 2, và chiều cao của cây là 2.
-

Rừng là đồ thị mà mỗi thành phần liên thông là cây.


-

-

Một nút là một cây. Nút đó cũng gọi là gốc của cây ấy.

-

Bậc của một nút là số cây con của nút đó.

Bậc của một cây là bậc lớn nhất của các nút trong cây (số cây con

tối đa của một nút thuộc cây).
-

Cây có bậc n thì gọi là cây n-phân. Cây n-phân là cây mà mọi đỉnh

có tối đa n con và có ít nhất một đỉnh có n con.
-Cây n-phân đầy đủ là cây mà mọi đỉnh trong có đúng n con.
-

Cây cân bằng là cây mà mọi đỉnh lá có mức là h hay h-1, trong đó


h là chiều cao của cây.
-

Đỉnh lá là đỉnh có bậc 1 còn được gọi là lá. Thường dùng cho cây

có gốc, khi đó lá là đỉnh không có con.
-Nút gốc là nút không có nút cha.
-Các nút không có nút con được gọi là nút lá.
-Nút nhánh là nút có bậc khác 0 và không phải là gốc.
Ta quy ước: Một cây không có nút nào được gọi là cây
rỗng (null
tree).
-

Độ dài đường đi từ gốc đến nút x: Px = số cạnh cần đi qua kể từ

gốc đến x.

2. SƠ ĐỒ CẤU TRÚC CÂY:


A

Gốc

Cạnh

Nút
C


B

G

H

D

E

F



3. ỨNG DỤNG CẤU TRÚC CÂY:
-

Xây dựng các thuật toán rất có hiệu quả để định vị các phần tử

trong một danh sách.
-

Xây dựng các mạng máy tính với chi phí rẻ nhất cho các đường

điện thoại nối các máy phân tán.
-

Cây cũng được dùng để tạo ra các mã có hiệu quả để lưu trữ và

truyền dữ liệu.

-

Cấu trúc cây được ứng dụng trong các giải thuật tìm kiếm, giải

thuật sắp xếp và nhiều bài toán khác.
-

Cây dùng để biểu diễn bài toán quyết định (cây quyết định), biểu

diễn quá trình tính toán các biểu thức đại số.

4. MỘT SỐ VÍ DỤ VỀ ĐỐI TƯỢNG CÁC CẤU TRÚC DẠNG CÂY:
4.1. Sơ đồ tổ chức của một công ty:


BB-Electronic

R&D

Nội

Châu

Mỹ

Các

4.2. Mục lục một quyển sách:

Student


Giới

Bài

Thực

Thi

4.3. Biểu diễn biểu thức số học dưới dạng cây: x + y * (z - t) + u /
v.

+

+

x

/

*

u

v


5. NHẬN XÉT:
-Trong cấu trúc cây không tồn tại chu trình.
-


Tổ chức một cấu trúc cây cho phép truy cập nhanh đến các phần

tử của nó.

II.

TÌM HIỂU CÂY NHỊ PHÂN :

1. ĐỊNH NGHĨA :
-

Cây nhị phân là một dạng cấu trúc cây quan trọng, mỗi nút của nó

chỉ có tối đa hai nút con.
-

Với mỗi nút trên cây nhị phân, cây con xuất phát từ nút con trái gọi

là cây con trái và cây con xuất phát từ nút con phải gọi là cây con phải
của nó. Như vậy, cây nhị phân là cây có thứ tự.

2. MỘT SỐ DẠNG ĐẶC BIỆT CỦA CÂY NHỊ PHÂN :

A
B
C
D



a)


D
H

I

J

I

H

Các cây a), b), c), d) được gọi là cây nhị phân suy biến.

-

-

g)

+

Cây a) được gọi là cây lệnh trái.

+

Cây b) được gọi là cây lệnh phải.


+

Cây c), d) được gọi là cây zic-zắc.

Cây e) được gọi là cây nhị phân hoàn chỉnh. Như vậy, cây nhị

phân hoàn chỉnh là cây nhị phân đầy đủ mà tất cả các lá có cùng một
mức.
-

Cây f) có các nút tối đa ở cả mọi mức nên gọi là cây nhị phân đầy

đủ cân bằng. Đó là trường hợp đặc biệt của cây nhị phân hoàn chỉnh.


Cây g) gọi là cây gần đầy, khác với cây e) ở chỗ các nút ở mức

-

cuối không đạt về phía trái.
3. TÍNH CHẤT :
Trong các cây nhị phân cùng có số lượng nút như nhau thì cây

-

nhị phân suy biến có chiều cao lớn nhất, cây nhị phân hoàn chỉnh hoặc
cây nhị phân gần đầy có chiều cao nhỏ nhất, loại cây này cũng là cây có
dạng cân đối nhất.
Số lượng tối đa các nút mức k (k≥1) trên cây nhị phân là
k-1

2 .
h

Số lượng tối đa các nút trên cây nhị phân độ cao h là 2 -1
(h≥1).



Chứng minh :

2) Chứng minh bằng quy nạp :
Ta biết :
0

- Ở mức 1 : k=1, cây nhị phân có tối đa 1=2 nút.
1

- Ở mức 2 : k=2, cây nhị phân có tối đa 2=2 nút.
Giả sử kết quả đúng với mức k-1, nghĩa là ở mức này cây nhị
phân có tối đa là 2

k-2

nút. Mỗi nút ở mức k-1 sẽ có tối đa hai con, do đó

k-2

2 nút ở mức k-1 sẽ cho : 2
được chứng minh).


k-2

* 2=2

k-1

nút tối đa ở mức k (Tính chất 2

3) Ta biết rằng chiều cao của cây là số mức lớn nhất có trên cây.
Theo 2) ta suy ra số nút tối đa có trên cây nhị phân với chiều
cao h là :
0

1

2

2 + 2 + 2 + ...+2

h-1

h

= 2 -1.


CHƯƠNG II: CÂY NHỊ PHÂN TÌM KIẾM
I. MỘT SỐ KHÁI NIỆM:
-


Cây nhị phân tìm kiếm (Binary Search Tree) là một cấu trúc dữ

liệu rất thuận lợi cho bài toán tìm kiếm.
-

Cây nhị phân tìm kiếm là cây nhị phân trong đó dữ liệu được gán

với các nút và dữ liệu được sắp xếp theo khóa sao cho khóa tại mỗi nút
của cây lớn hơn khóa của các nút cây con bên trái và nhỏ hơn hoặc bằng
khóa của các nút cây con bên phải.
Nếu số nút trên cây là N thì chi phí tìm kiếm trung bình chỉ
khoảng
log2N.
-

Cây tìm kiếm ứng với n khóa k1, k2, …, kn là cây nhị phân mà mỗi

nút đều được gán một khóa sao cho với mỗi nút k:

-

+

Mọi khóa trên cây con trái đều nhỏ hơn khóa trên nút k.

+

Mọi khóa trên cây con phải đều lớn hơn khóa trên nút k.

Cây nhị phân tìm kiếm là một cấu trúc dữ liệu cơ bản được sử


dụng để xây dựng các cấu trúc dữ liệu trừu tượng hơn như các tập hợp,
đa tập hợp, các dãy kết hợp.

II. SƠ ĐỒ CÂY NHỊ PHÂN TÌM KIẾM:
Cây con

15



III. CẤU TRÚC DỮ LIỆU:
Typedef struct NODE
{
int data;
NODE* left;
NODE* right;
};
Typedef struct NODE* TREE;
TREE root;

IV. CÁC THAO TÁC TRÊN CÂY NHỊ PHÂN TÌM KIẾM:
1. Khởi tạo cây Binary Search Tree:
1.1. Khởi tạo cây Binary Search Tree:
Cho con trỏ quản lý địa chỉ nút gốc về con trỏ NULL.
void init (Node &root)
{
root = NULL;
}
1.2. Tạo Node:

Node* GetNode (int x)
{
p = new Node;
if (p!= NULL)

{
p→ left = NULL;


p→ right = NULL;
p→ data = x;
}
return (p);
}
1.3. Tạo cây nhị phân tìm kiếm:
-

Ta có thể tạo cây nhị phân tìm kiếm bằng cách lặp lại quá trình

thêm một phần tử vào một cây rỗng.
void creatTree (Tree &root)
{
int x, n;
cout << “ nhap n= ”; cin>> n;
for (int i=1; i<=n; i++)
{
cout << “ nhap gia tri: ”; cin>> x;
insertTree (root.x);
}
}


-

Ví dụ về tạo cây nhị phân tìm kiếm:


3

18

29

50


2. Duyệt cây nhị phân tìm kiếm:
-

Khi một cây nhị phân tìm kiếm được tạo ra, tất cả các nút có thể

được duyệt theo thứ tự giữa nhờ duyệt đệ quy cây con bên trái, in nút
đang duyệt, rồi duyệt đệ quy cây con bên phải, tiếp tục làm như vậy với
mỗi nút của cây trong quá trình đệ quy. Với mọi cây nhị phân, cây có thể
được duyệt theo thứ tự trước hoặc theo thứ tự sau, cả hai cách đều hữu
dụng với cây nhị phân tìm kiếm .
-

Phép duyệt có độ phức tạp là Ω(n), vì nó phải duyệt qua tất cả các

nút. Độ phức tạp trên cũng là O(n).

-

Khi duyệt theo thứ tự giữa, trình tự các nút duyệt qua sẽ cho ta

một dãy các nút theo thứ tự tăng dần của khóa.
2.1. Duyệt theo thứ tự trước (Node - Left - Right):
Duyệt nút gốc, duyệt cây con bên trái, duyệt cây con bên phải.
void NLR (TREE root)
{
if (root!=NULL)
{
cout << root→ data<< “ “;


NLR (root→ left);
NLR (root→ right);
}
}
2.2. Duyệt theo thứ tự giữa (Left - Node - Right):
Duyệt cây con bên trái, duyệt nút gốc, duyệt cây con bên phải.

void LNR (TREE root)
{
if (root!=NULL)
{
LNR (root→ left);
cout << root→ data<< “ “;
LNR (root→ right);
}
}

2.3. Duyệt theo thứ tự sau (Left - Right - Node):
Duyệt cây con bên trái, duyệt cây con bên phải, duyệt nút gốc.
void LRN (TREE root)
{
if (root!=NULL)
{
LRN (root→ left);
LRN (root→ right);
cout << root→ data<< “ “;
}


}
3. Tìm một phần tử x trong cây:



Giải thuật tìm kiếm:

+
+

Đầu vào: Cây nhị phân tìm kiếm T và khóa K.

Đầu ra: Kết luận K không có trong cây T hoặc xác định vị trí

chứa khóa K
+

Phương pháp:

(1)

Xuất phát:

Đặt nút v ban đầu là gốc.
(2) Kiểm tra khóa:
Nếu K bằng khóa dữ liệu tại v, nút v là vị trí chứa dữ liệu với
khóa K, kết thúc.
(3) Tìm vị trí lưu dữ liệu:
Nếu khóa K nhỏ hơn khóa dữ liệu tại v, sang bước (4).
Ngược lại sang bước (5).
(4) Tìm bên trái:
Nếu v không có nút con trái, kết luận: khóa K không có
trong cây T, kết thúc.
Ngược lại, đặt v là nút con trái của v, quay lại (2).
(5) Tìm bên phải:
Nếu v không có nút con phải, kết luận: khóa K không có
trong cây T, kết thúc.


-

Ngược lại, đặt v là nút con phải của v, quay lại (2).
Nhận xét:

Thời gian tìm kiếm sẽ lớn nhất nếu khóa K không có trong cây T

và ta phải đi theo đường đi dài nhất từ gốc đến lá. Như vậy, thời gian tìm



×