Tải bản đầy đủ (.pdf) (56 trang)

Xây dựng chương trình mô phỏng các thuật toán cơ bản trên cây đỏ đen

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 (554.61 KB, 56 trang )



TRƯỜNG ĐẠI HỌC SƯ PHẠM HÀ NỘI 2
KHOA CÔNG NGHỆ THÔNG TIN
*************



TRẦN THỊ SIM



XÂY DỰNG CHƯƠNG TRÌNH MÔ PHỎNG
CÁC THUẬT TOÁN CƠ BẢN
TRÊN CÂY ĐỎ ĐEN


KHÓA LUẬN TỐT NGHIỆP ĐẠI HỌC
Chuyên ngành: Khoa học máy tính







HÀ NỘI – 2015



TRƯỜNG ĐẠI HỌC SƯ PHẠM HÀ NỘI 2


KHOA CÔNG NGHỆ THÔNG TIN
*************



TRẦN THỊ SIM



XÂY DỰNG CHƯƠNG TRÌNH MÔ PHỎNG
CÁC THUẬT TOÁN CƠ BẢN
TRÊN CÂY ĐỎ ĐEN


KHÓA LUẬN TỐT NGHIỆP ĐẠI HỌC
Chuyên ngành: Khoa học máy tính



Người hướng dẫn khoa học
PGS. TS. BÙI THẾ HỒNG



HÀ NỘI – 2015



LỜI CẢM ƠN


Lời đầu tiên em xin chân thành cảm ơn sự hướng dẫn tận tình của thầy
giáo PGS. TS Bùi Thế Hồng, đã trực tiếp hướng dẫn và chỉ bảo tận tình cho
em hoàn thành khóa luận này.
Em cũng xin chân thành cảm ơn các thầy, cô giáo trong khoa Công nghệ
thông tin, cũng như các thầy, cô giáo trong trường đã giảng dạy và giúp đỡ
em trong các năm học vừa qua. Chính các thầy, cô giáo đã xây dựng cho
chúng em những kiến thức nền tảng và kiến thức chuyên môn để em có thể
hoàn thành khóa luận tốt nghiệp và chuẩn bị cho những công việc của mình
sau này.
Cuối cùng em xin bày tỏ lòng biết ơn tới gia đình và bạn bè đã giúp đỡ
động viên em rất nhiều trong suốt quá trình học tập để em có thể thực hiện tốt
khóa luận này.
Do kiến thức và thời gian còn hạn chế nên khóa luận không tránh khỏi
những thiếu sót. Kính mong nhận được sự đóng góp ý kiến của các thầy, cô
giáo và các bạn để khóa luận được hoàn thiện hơn.

Hà Nội, tháng 05 năm 2015
Sinh viên



Trần Thị Sim







LỜI CAM ĐOAN


Tên em là: Trần Thị Sim
Sinh viên lớp: K37A – CNTT, khoa Công nghệ thông tin, trường Đại
học sư phạm Hà Nội 2.
Em xin cam đoan:
1. Đề tài “Xây dựng chương trình mô phỏng các thuật toán cơ bản trên
cây đỏ đen ” là sự nghiên cứu của riêng em, dưới sự hướng dẫn của thầy giáo
PGS.TS Bùi Thế Hồng.
2. Khóa luận hoàn toàn không sao chép của tác giả nào khác.
Nếu sai em xin hoàn toàn chiu trách nhiệm.

Hà Nội, tháng 05 năm 2015
Người cam đoan



Trần Thị Sim


MỤC LỤC
MỞ ĐẦU 1
CHƯƠNG 1. CÂY NHỊ PHÂN TÌM KIẾM 4
1.1. Định nghĩa 4
1.2. Cây nhị phân 5
1.3. Cây nhị phân tìm kiếm 10
1.4. Giải thuật tìm kiếm 11
1.4.1. Tìm một node trên cây tìm kiếm 11
1.4.2. Xóa một nút trên cây tìm kiếm 13
1.4.3. Thêm một nút trên cây tìm kiếm 16
CHƯƠNG 2. CÂY ĐỎ ĐEN 21

2.1. Giới thiệu 21
2.2. Định nghĩa 22
2.3 Tính chất 23
2.4 . Tính hiệu quả của cây đỏ đen 25
2.5. Các thuật toán cơ bản trên cây đỏ đen 25
2.5.1. Thêm một nút mới 25
2.5.2. Xóa một nút 33
2.5.3. Tìm kiếm một nút 37
CHƯƠNG 3. XÂY DỰNG CHƯƠNG TRÌNH MÔ PHỎNG 38
3.1. Phát biểu bài toán 38
3.2. Xây dựng chương trình mô phỏng 39
3.2.1. Khởi tạo cây 39
3.2.2. Xoay trái x 39


3.2.3. Xoay phải x 40
3.2.4. Thêm nút x vào cây 41
3.2.5. Cấp phát và thêm nút vào cây 41
3.2.6. Xóa một nút x vào cây 42
3.2.7. Tìm nút x 44
3.3. Thiết kế giao diện 44
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 46
TÀI LIỆU THAM KHẢO 48














DANH MỤC HÌNH

Hình 1.1. Hình ảnh một cây 5
Hình 1.2. Cây nhị phân 6
Hình 1.3. Cây nhị phân không có thứ tự 7
Hình 1.4. Cây nhị phân lệch 8
Hình 1.5. Cây zíc – zắc 8
Hình 1.6. Cây nhị phân hoản chỉnh 9
Hình 1.7. Cây nhị phân đầy đủ 9
Hình 1.8. Cây nhị phân gần đầy 9
Hình 1.9. Cây nhị phân tìm kiếm 11
Hình 1.10. Tìm nút trên cây với khóa x=55 12
Hình 1.11. Xóa nút trên cây với khóa x =40 13
Hình 1.12. Xóa một nút trên cây với khóa x = 37 14
Hình 1.13. Xóa một nút với khóa x = 18 16
Hình 1.14. Thêm một nút với khóa x = 10 vào cây 17
Hình 1.15. Cây nhị phân ban đầu 20
Hình 1.16. Thêm nút có khóa x = 7 20
Hình 1.17. Tái cân bằng lại cây khi thêm nút với khóa x = 7. 20
Hình 2.1. Các nút được chèn theo thứ tự tăng dần 21
Hình 2.2. Ví dụ về cây đỏ đen 23
Hình 2.3. Lật màu 26
Hình 2.4. Các biến dạng của nút khi được chèn với x là cháu ngoại 27
Hình 2.5. Các biến dạng của nút khi được chèn với x là cháu nội. 27

Hình 2.6. Các khả năng khi chèn nút 28
Hình 2.7. Nút P đỏ và X là cháu ngoại 30
Hình 2.8. P đỏ và x là nút cháu nội 32
Hình 2.9. Minh họa trường hợp 2 34
Hình 2.10 Minh họa trường hợp 3 35
Hình 2.11. Minh họa trường hợp 4 35


Hình 2.12. Minh họa trường hợp 5 36
Hình 2.13. Minh họa trường hợp 6 37
Hình 3.1. From giao diện chính của chương trình 44
Hình 3.2. From chức năng chèn một phần tử 45
Hình 3.3. From chức năng xóa một phần tử 45
Hình 3.4. From chức năng tìm một phần tử 45

1

MỞ ĐẦU
1. 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ể được sử dụng một cách hiệu quả. Thông thường,
một cấu trúc dữ liệu được chọn cẩn thận sẽ cho phép thực hiện thuật toán
hiệu quả hơn. Việc chọn cấu trúc dữ liệu thường bắt đầu từ việc chọn một
cấu trúc dữ liệu trừu tượng. 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.
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.

Có nhiều phương pháp tìm kiếm cơ bản và phổ biến, đối với dữ liệu ở
bộ nhớ trong nghĩa 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à một phương pháp
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 khóa đã phải 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 khóa 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 cấu trúc dữ liệu hay, cùng với cây nhị phân
tìm kiếm 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 với đặc tính tái cân bằng lại cây đã tạo nên sự
khác biệt cho phương pháp này. Chính vì vậy em đã chọn đề tài: “Xây dựng
2

chương trình mô phỏng các thuật toán cơ bản trên cây đỏ đen” để làm khóa
luận.
2. Mục đích của đề tài
Đề tài nhằm nghiên cứu lý thuyết về cây đỏ đen, một dạng cây tìm
kiếm nhị phân 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. Trên cơ sở thực hiện mô phỏng các phép toán chèn, xóa, tìm
kiếm trên cây đỏ đen, đề tài nhằm khẳng định những 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 là việc nên làm.
3. Nhiệm vụ nghiên cứu
Nghiên cứu và làm rõ những khái niệm, tính chất về cấu trúc dữ liệu
cây, cây nhị phân, cây nhị phân tìm kiếm. Trên cơ sở đó xây dựng cấu trúc
cây đỏ đen.

Nghiên cứu các phép toán chèn, xóa, tìm kiếm trên cấu trúc dữ liệu cây
đỏ đen, đánh giá chúng so với cây nhị phân tìm kiếm.
Mô phỏng các phép toán chèn, xóa, tìm kiếm một node trên cây đỏ đen.
4. Đối tượng và phạm vi nghiên cứu
Đối tượng nghiên cứu: Cây đỏ đen
Phạm vi nghiên cứu: Các phép chèn, xóa, tìm kiếm các node trên cây đỏ
đen.
5. Ý nghĩa khoa học và thực tiễn
Ý nghĩa khoa học: Cây đỏ đen ra đời, phát triển và có cơ sở khoa học
vững chắc đã giúp cho việc nghiên cứu chứng minh được việc sử dụng
phương pháp cây đỏ đen vào việc lưu trữ dữ liệu và thực hiện việc tìm kiếm
trong bài toán tìm kiếm là việc nên làm. Hiện nay, việc làm thế nào để giảm
thiểu chi phí tìm kiếm là một lĩnh vực đang được các chuyên gia nghiên cứu
và phát triển.
Ý nghĩa thực tiễn: Chương trình thử nghiệm nếu thành công sẽ biết được
hình dạng của cây phát triển như thế nào và đó là một cây nhị phân tìm kiếm
3

cân bằng từ đó giảm thiểu chi phí tìm kiếm dữ liệu đối với dữ liệu trong một
danh sách tuyến tính .
6. Phương pháp nghiên cứu
+ Phương pháp nghiên cứu lý luận
Nghiên cứu qua việc đọc sách, báo và các tài liệu liên quan nhằm xây
dựng cơ sở lý thuyết của khóa luận và các biện pháp cần thiết để giải quyết
các vấn đề của khóa luận.
+ Phương pháp chuyên gia
Tham khảo ý kiến của các chuyên gia để có thể thiết kế chương trình phù
hợp với yêu cầu thực tiễn. Nội dung xử lý nhanh đáp ứng được yêu cầu ngày
càng cao của người sử dụng.
+ Phương pháp thực nghiệm

Thông qua quan sát thực tế, yêu cầu của cơ sở, những lý luận được nghiên
cứu và kết quả đạt được qua những phương pháp trên.
7. Cấu trúc khóa luận
Ngoài lời cảm ơn, mở đầu, kết luận và hướng phát triển, tài liệu tham
khảo, khóa luận được chia thành 3 chương:
Chương 1: Cây nhị phân tìm kiếm - Chương này giới thiệu tổng quan về
cây, khái niệm và các tính chất của cây, cây nhị phân, cây nhị phân tìm kiếm
và các giải thuật tìm kiếm, các thao tác chèn và xóa, tìm kiếm trên cây nhị
phân tìm kiếm, tính chất của cây nhị phân tìm kiếm.
Chương 2: Cây đỏ đen - Chương này trình bày về 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ững hiệu
quả khi sử dụng cây đỏ đen.
Chương 3: Xây dựng chương trình mô phỏng - Chương này phát biểu
về bài toán cây đỏ đen và chương trình mô phỏng các thuật toán chèn, xóa,
thêm node trên cây đỏ đen.


4

CHƯƠNG 1.
CÂY NHỊ PHÂN TÌM KIẾM
1.1. Định nghĩa
Cây là một cấu trúc dữ liệu có vai trò quan trọng trong việc phân tích
và thiết kế các thuật toán. Lưu trữ và biểu diễn kiểu cây có thể thấy trong
nhiều lĩnh vực của cuộc sống. Ví dụ một cuốn gia phả lưu thông tin về các
thành viên trong một dòng họ, trong đó các thành viên thứ bậc khác nhau
được phân thành các cấp khác nhau trong biểu diễn hình cây gia phả. Sơ đồ tổ
chức của 1 đơn vị cũng thường được biểu diễn thông qua một cấu trúc cây.
Các đơn vị con nằm ở cấp dưới đơn vị trực tiếp quản lý. Các đơn vị ngang
hàng nằm cùng cấp. Trong lĩnh vực máy tính, cách lưu trữ dữ liệu của hệ điều

hành cũng áp dụng kiểu lưu trữ cây. Các tệp tin được lưu trữ trong các cây thư
mục, trong đó các thư mục con nằm trong thư mục cha.Cây có thể được định
nghĩa như sau:
Cây là một tập hợp các nút (các đỉnh) và các cạnh, thỏa mãn một số yêu
cầu nào đó. Mỗi nút của cây đều có một định danh và có thể mang thông tin
nào đó. Các cạnh dùng để liên kết các nút với nhau. Một đường đi trong cây
là một danh sách các đỉnh phân biệt mà đỉnh trước có liên kết với đỉnh sau.
Một tính chất quan trọng hình thành nên cây, đó là có đúng một đường
đi nối hai nút bất kì trong cây. Nếu tồn tại hai nút trong cây mà có ít hoặc
nhiều hơn một đường đi thì lúc đó có một đồ thị.
Mỗi cây thường có một nút được gọi là nút gốc. Mỗi nút đều có thể coi
là nút gốc của cây con bao gồm chính nó và các nút bên dưới nó. Trong biểu
diễn hình học của cây, nút gốc thường nằm ở vị trí cao nhất, tiếp theo là các
nút kế tiếp.




5









Hình 1.1. Hình ảnh một cây
Như vậy có thể thấy rằng cây bao gồm gốc và các cây con nối với gốc.

Qua đó, có thể định nghĩa cây dưới dạng đệ qui như sau. Cây có thể là:
+ Một nút đứng riêng lẻ (và nó chính là gốc của cây).
+ Hoặc một nút kết hợp với một số cây con bên dưới.
Mỗi nút trong một cây (trừ nút gốc) có đúng 1 nút nằm trên nó, gọi là
nút cha (parent). Các nút nằm ngay dưới nút đó được gọi là nút con
(subnode). Các nút nằm cùng cấp được gọi là các nút anh em (sibling). Nút
không có nút con nào được gọi là nút lá (leaf) hoặc nút tận cùng.
Chiều cao của nút là đường đi dài nhất từ nút tới nút lá. Chiều cao của
cây chính là chiều cao của nút gốc. Độ sâu của 1 nút là độ dài đường đi duy
nhất giữa nút gốc và nút đó.
1.2. Cây nhị phân
Cây nhị phân là một dạng quan trọng của cấu trúc cây. Cây nhị phân có
các đặc điểm là: Mọi nút trên cây chỉ có tối đa là 2 nút con. Đối với mỗi cây
con của mỗi nút thì phân biêt cây con trái và cây con phải.





Nút cha
Nút lá

Nút gốc
Nút con
6













Hình 1.2. Cây nhị phân
Cây nhị phân là loại cây có cấu trúc đơn giản và có nhiều ứng dụng
trong tin học. Các cây nhị phân sau đây là khác nhau, xong chúng đều là cây
nhị phân không có thứ tự.














5
2
6
1
3

7
4
7






























Hình 1.3. Cây nhị phân không có thứ tự

8












a) Cây lệch trái b) Cây lệch phải

Hình 1.4. Cây nhị phân lệch














Hình 1.5. Cây zíc – zắc
9











Hình 1.6. Cây nhị phân hoản chỉnh







Hình 1.7. Cây nhị phân đầy đủ










Hình 1.8. Cây nhị phân gần đầy
10

Các hình trên là một số dạng đặc biệt của cây nhị phân. Các cây nhị
phân hình 1.4 được gọi là cây nhị phân suy biến vì thực chất nó có dạng của
một danh sách tuyến tính.
Cây nhị phân hình 1.5 được gọi là cây nhị phân hoàn chỉnh. Các nút
ứng với các mức trừ mức cuối cùng đều đạt tối đa và mức cuối cùng các nút
đều dạt về trái.
Cây nhị phân hình 1.6 có các nút tối đa ở cả mọi mức nên còn gọi là
cây nhị phân đầy đủ. Cây nhị phân đầy đủ là một trường hợp đặc biệt của cây
nhị phân hoàn chỉnh.
Cây nhị phân hình 1.7 là cây gần đầy, khác với cây (hình 1.6) ở chỗ các
nút ở mức cuối không dạt về phía trái.
Cây nhị phân có một số tính chất sau:
+ Trong các phân 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 có 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 i trên cây nhị phân là 2
i-1
, tối thiểu
là 1 (i≥1).
+ Số lượng tối đa các nút trên cây một cây nhị phân có chiều cao là
2
h

-1, tối thiểu là h (h≥1).
+ Cây nhị phân hoản chỉnh, không đầy đủ, có n nút thì chiều cao của
nó là: h =[log

(
 + 1
)
] + 1
+ Cây nhị phân đầy đủ, có n nút, thì chiều cao của nó là

h = log

( + 1)
1.3. Cây nhị phân tìm kiếm
Cây nhị phân tìm kiếm ứng với n khóa là một cây nhị phân mà mỗi nút
của nó đều được gán một giá trị khóa nào đó trong các giá trị khóa đã cho và
đối với mọi nút trên cây tính chất sau đây luôn được thỏa mãn:
11

+ Mọi khóa thuộc cây con trái nút gốc đều nhỏ hơn khóa ứng với
nút đó.
+ Mọi khóa thuộc cây con phải nút gốc đều lớn hơn khóa ứng với
nút đó.
Ở đây thứ tự chọn quy ước là thứ tự tăng dần đối với số và thứ tự từ
điển đối với chữ.









Hình 1.9. Cây nhị phân tìm kiếm
Nhờ ràng buộc về khóa trên cây nhị phân tìm kiếm, việc tìm kiếm trở
nên có định hướng. Hơn nữa, do cấu trúc cây việc tìm kiếm trở nên nhanh
đáng kể. Chi phí tìm kiếm trung bình chỉ khoảng log

.
1.4. Giải thuật tìm kiếm
1.4.1. Tìm một node trên cây tìm kiếm
Đối với một cây nhị phân tìm kiếm để tìm xem một khóa x nào đó có
trên cây đó không, đầu tiên phải so sánh x với khóa ở gốc và có 1 trong 4 tình
huống sau đây sẽ xuất hiện:
+ Không có gốc (cây rỗng): X không có trên cây phép tìm kiếm
không thỏa mãn.
+ X trùng với khóa gốc: Phép tìm kiếm được thỏa mãn.
+ X nhỏ hơn khóa ở gốc: Tìm kiếm tiếp tục bằng cách xét cây con
trái của gốc với cách làm tương tự.
5
3
7
1
4
8
6
12

+ X lớn hơn khóa ở gốc: Tìm kiếm được thực hiện tiếp tục bằng
cách xét cây con bên phải của gốc với cách làm tương tự.












Hình 1.10. Tìm nút trên cây với khóa x=55
Như ở cây hình 1.10, nếu x = 55 thì sẽ thực hiện
+ So sánh x với 44: x>44 chuyển sang cây con phải.
+ So sánh x với 88: x<88 chuyển sang cây con bên trái.
+ So sánh x với 55: x=55, vậy tìm kiếm đã được thỏa mãn.
Giải thuật tìm kiếm trên cây tìm kiếm nhị phân như sau:
Cay timkiem (cay p , int x)
{
while(p!= NULL)
{
if( p->data ==x) return p;
else if (x<p->data) p = p->left;
else p = p->right;
}
return NULL;
}
88>x
So sánh x với 44


44
88
18
37
55 98
44<x
13




1.4.2. Xóa một nút trên cây tìm kiếm
Việc hủy một phần tử X ra khỏi cây phải bảo đảm điều kiện ràng buộc
của CNPTK (cây nhị phân tìm kiếm).
Có 3 trường hợp khi hủy nút X có thể xảy ra:
+ X - nút lá.
+ X - chỉ có 1 cây con (trái hoặc phải).
+ X - có đủ cả 2 cây con
Trường hợp thứ nhất: Chỉ đơn giản hủy X vì nó không móc nối đến
phần tử nào khác.











Hình 1.11. Xóa nút trên cây với khóa x =40
Trường hợp thứ hai: Trước khi xóa x thì phải móc nối cha của x với
con duy nhất của nó.




99
44
18
88
59
55 71
37
13
40
23
14











Hình 1.12. Xóa một nút trên cây với khóa x = 37

Trường hợp cuối cùng: Không thể hủy trực tiếp do x có đủ hai con mà
sẽ hủy gián tiếp. Thay vì hủy x, mà là tìm một phần tử thế mạng y. Phần tử
này có tối đa một con. Thông tin lưu tại y sẽ chuyển lên lưu tại x. Sau đó, nút
bị hủy thật sẽ là y giống như hai trường hợp đầu.
Vấn đề là phải chọn y sao cho khi lưu y vào vị trí của x, cây vẫn là cây
nhị phân tìm kiếm.
Có 2 phần tử thỏa mãn yêu cầu:
+ Phần tử nhỏ nhất (trái nhất) trên cây con phải.
+ Phần tử lớn nhất (phải nhất) trên cây con trái.
Việc chọn lựa phần tử nào là phần tử thế mạng hoàn toàn phụ thuộc vào
ý thích của người lập trình.
Giải thuật xóa trên cây nhị phân tìm kiếm nhị phân như sau:
int delkey (cay&p, int x)
{
if (p==NULL) return p;
else if (p->key>x) return delkey(p->left, x);
else if (p->key<x) return delkey (p->right,x);
else
44
18
88
37
13
59
99
55 71
23
15

{

Node *q=p;
if (p->left==NULL) p=p->right;
else if (p->right ==NULL) p= p->left;
else
{
Node *s=p, *t=s->left;
while (t->right !=NULL)
{
S=t;
T= t->right;
}
q->key=t->key;
s->right=t->left;
delete t;
}
}
return 1;
}










16

















Hình 1.13. Xóa một nút với khóa x = 18
1.4.3. Thêm một nút trên cây tìm kiếm
Đối với một cây nhị phân tìm kiếm để thêm x vào cây, đầu tiên phải so
sánh x với khóa ở gốc và có 1 trong 4 tình huống sau đây sẽ xuất hiện:
+ Không có gốc (cây rỗng): Thêm x vào cây.
+ X trùng với khóa gốc
+ X nhỏ hơn khóa gốc: Tìm kiếm thực hiện tiếp tục bằng cách
xét cây con trái của gốc với cách làm tương tự.
+ X lớn hơn khóa ở gốc: Tìm kiếm được thực hiện tiếp tục
bằng cách xét cây con phải của gốc với cách làm tương tự.




44

88
37 13 59
99
55
71
40
23
30
18
17











a) Cây ban đầu












b) Sau khi nút với khóa x =10
Hình 1.14. Thêm một nút với khóa x = 10 vào cây
Như với cây ở hình 1.14, nếu x =10 thì sẽ thực hiện :
+ So sánh x với 5: x>5 vậy phải chuyển sang cây con phải.
+ So sánh x với 8: x>8 vậy phải chuyển sang cây con phải.
+ So sánh x với 9: x>9 cho nên thêm một nút với khóa x=10 vào
bên phải.

5
1
2
8
4
6
9
7
3
10
5
1
2
8
4
6
9
7
3

×