btvn.vn
Tìm kiếm Đăng nhập

Chèn và tìm khóa trên BST

Lưu trên thiết bị này
Chuyên đề lựa chọn CS: Cây tìm kiếm nhị phân · Chọn bài khác

Nhỏ hơn sang trái, lớn hơn sang phải

Chèn một khóa bắt đầu từ gốc. Nếu nhỏ hơn khóa hiện tại thì sang trái, lớn hơn thì sang phải. Gặp khóa bằng nhau thì dừng vì mô hình cơ bản không nhận khóa trùng. Gặp ô trống hoặc chỉ số ngoài mảng thì đặt khóa mới tại vị trí đó, bổ sung None nếu cần. Hàm trả True nếu thêm mới, False nếu khóa đã có. Chỉ dùng các khóa so sánh được với nhau; None dành cho ô trống. ```python def insert(T, v): k = 0 while k < len(T) and T[k] is not None: if v < T[k]: k = left(k) elif v > T[k]: k = right(k) else: return False if k >= len(T): T.extend([None] * (k-len(T)+1)) T[k] = v return True ```

Chèn 5 và tìm 11 trên cây mẫu

Chèn lần lượt 8,4,12,2,6,10,14 rồi chèn 5: |Khóa đang xét|So sánh với 5|Đi tiếp| |---|---|---| |8|5<8|Trái, chỉ số 1| |4|5>4|Phải, chỉ số 4| |6|5<6|Trái, chỉ số 9| Vị trí 9 chưa có trong mảng dài 7, nên thêm 3 ô để có các chỉ số 7,8,9 rồi đặt 5 tại 9. Mảng thành `[8,4,12,2,6,10,14,None,None,5]`. Tìm 5 trả 9. Tìm 11 đi qua 8→12→10 rồi sang con phải của 10 đang trống, trả −1. Khi dùng kết quả tìm, phải kiểm k>=0 trước khi đọc T[k]; trong Python T[−1] lại là phần tử cuối, không phải thông báo “không tìm thấy”.

Bài luyện

Chèn 5 vào cây mẫu bảy nút thì 5 nằm ở vị trí nào?
Chọn một đáp án

Bài luyện

search(T,0,11) trả −1. Cách xử lí nào đúng?
Chọn một đáp án

Bài luyện

Trong mô hình khóa khác nhau, insert(T,8) khi 8 đã có sẽ làm gì?
Chọn một đáp án

Đang học