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

Duyệt trước, duyệt giữa và duyệt sau

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

Tên phép duyệt nói vị trí thăm gốc

Duyệt cây là thăm mỗi nút thật đúng một lần. Với cây con bất kì: |Phép duyệt|Thứ tự| |---|---| |Duyệt trước — preorder|Gốc → toàn bộ cây con trái → toàn bộ cây con phải| |Duyệt giữa — inorder|Toàn bộ cây con trái → gốc → toàn bộ cây con phải| |Duyệt sau — postorder|Toàn bộ cây con trái → toàn bộ cây con phải → gốc| “Duyệt cây con trái” nghĩa là áp dụng lại chính quy tắc đang dùng cho cả cây con ấy, không chỉ đọc một nút con rồi chuyển ngang. Gặp chỉ số ngoài mảng hoặc None thì không thăm nút và không đi tiếp nhánh đó.

Thay in trực tiếp bằng thêm vào danh sách kết quả

Các hàm dưới đây nhận out là danh sách kết quả, ban đầu rỗng. Sau khi gọi, in out để xem thứ tự. Phần reverseorder dùng ở bài sắp xếp phía sau. ```python def preorder(T, k, out): if 0 <= k < len(T) and T[k] is not None: out.append(T[k]) preorder(T, left(k), out) preorder(T, right(k), out) def inorder(T, k, out): if 0 <= k < len(T) and T[k] is not None: inorder(T, left(k), out) out.append(T[k]) inorder(T, right(k), out) def postorder(T, k, out): if 0 <= k < len(T) and T[k] is not None: postorder(T, left(k), out) postorder(T, right(k), out) out.append(T[k]) def reverseorder(T, k, out): if 0 <= k < len(T) and T[k] is not None: reverseorder(T, right(k), out) out.append(T[k]) reverseorder(T, left(k), out) ```

Theo dõi trên cây gốc 8

Với `T=[8,4,12,2,6,10,14]`: |Phép duyệt|Kết quả| |---|---| |Trước|8,4,2,6,12,10,14| |Giữa|2,4,6,8,10,12,14| |Sau|2,6,4,10,14,12,8| Duyệt sau phải hoàn tất cây con trái gốc 4: thăm 2,6 rồi 4; sau đó hoàn tất cây con phải gốc 12: thăm 10,14 rồi 12; cuối cùng mới thăm 8. ```python T = [8,4,12,2,6,10,14] out = [] postorder(T, 0, out) print(out) ``` Mỗi lần muốn lấy một kết quả riêng, tạo out mới hoặc xóa kết quả cũ trước. Nếu dùng lại out mà không xóa, kết quả lần sau sẽ nối vào lần trước.

Bài luyện

Duyệt trước cây mẫu [8,4,12,2,6,10,14] nhận thứ tự nào?
Chọn một đáp án

Bài luyện

Duyệt sau cây mẫu, nút nào được thăm cuối?
Chọn một đáp án

Bài luyện

Với T=[8,4,12,None,6], duyệt giữa cho kết quả gì?
Chọn một đáp án

Đang học