Đặt vấn đề: Sau khi xóa xong một nút,
thay đổi cây còn lại vẫn đảm bảo là cây nhị phân tìm kiếm. phân tìm kiếm.
27
4.2.2.3 Phép xóa một nút
Ý tưởng:
– Tìm đến nút có khóa bằng x, gọi V là con trỏ
đến nút này V->element = X
– Xảy ra 2 trường hợp:
• V là nút lá: chỉ cần gỡ bỏ V bằng cách thay nút bên
trái hoặc bên phải của nút cha V = Null
• V là nút một cành: gỡ bỏ V bằng cách sửa lại mối
nối (left hoặc right) ở nút cha của V trỏ xuống nút cháu, cây còn lại vẫn là nhị phân tìm kiếm
• Nút V có đủ cả hai cây con: trường hợp này khá
28
4.2.2.3 Phép xóa một nút
Trường hợp này khóa của nút V chen giữa các khóa của nút cực phải của cây con trái các khóa của nút cực phải của cây con trái và khóa của nút cực trái của cây con phải, vậy gỡ bỏ nút V phải thay thế một nút
khác vào chỗ trống đó để đảm bảo điều
kiện cây tìm kiếm, chỉ có thể thay thế bằng một trong hai nút con trên. Có thể xét một trong hai nút con trên. Có thể xét
trường hợp thay bằng nút cực phải của cây con trái. con trái.
29
4.2.2.3 Phép xóa một nút
Giải thuật chi tiết:
Với T : cây nhị phân tìm kiếm; X là giá trị cần xóa; V là con trỏ đến nút đang xét.
Xuất phát từ cây gốc V, tìm nút chứa khóa x để loại bỏ, có các trường hợp sau:
- V=Null, không tìm thấy
- X< V.element thực hiện loại bỏ cây bên trái
- X> V.element lặp lại việc tìm để loại bỏ cây bên
phải,
30
4.2.2.3 Phép xóa một nút
Giải thuật chi tiết: