- FULL_QUEUE(Q) kiểm tra hàng đầy.
2. Cây tìm kiếm nhi ̣phân (Binary Search Tre e BST) 1 Đi ̣nh nghi ̃a
2.6. Duyê ̣t cây
Duyê ̣t cây (tree travel) là thao tác duyệt qua (đến thăm) tất cả các nút trên cây.
Có nhiều cách để duyệt một cây , chẳng ha ̣n như duyê ̣t theo chiều sâu (DFS), duyê ̣t theo chiều rô ̣ng (BFS), nhưng ở đây ta phân chia các cách duyê ̣t mô ̣t cây BST dựa trên thứ tự đến thăm nút gốc, nút con trái, và nút con phải của gốc.
Cụ thể có ba cách duyệt một cây BST: duyê ̣t thứ tự trước, thứ tự giữa, thứ tự sau. Để minh ho ̣a kết quả của các cách duyê ̣t cây ta xét cây ví du ̣ sau :
Hình 5.6. Cây tìm kiếm nhi ̣ phân, tham khảo từ wikipedia Duyê ̣t thứ tự trước (pre-order traversal):
Thăm gốc (visit root).
Duyê ̣t cây con trái theo thứ tự trước Duyê ̣t cây con phải theo thứ tự trước. Cụ thể thuật toán được cài đặt như sau: // duyet theo thu tu truoc
void pre_order(BSTree *node) {
if(node!=NULL) {
visit(node); // ham tham mot nut, don gian la in gia tri khoa pre_order(node->left);
pre_order(node->right); }
}
Kết quả duyê ̣t cây theo thứ tự trước: 8, 3, 1, 6, 4, 7, 10, 14, 13.
Trong cách duyê ̣t theo thứ tự trước, gốc của cây luôn được thăm đầu tiên. Duyê ̣t thứ tự giữa (in-order traversal):
Duyê ̣t cây con trái theo thứ tự giữa Thăm gốc
44 Duyê ̣t cây con phải theo thứ tự giữa.
Kết quả duyê ̣t cây theo thứ tự trước: 1, 3, 4, 6, 7, 8, 10, 13, 14.
Mô ̣t điều dễ nhâ ̣n thấy là các khóa của cây khi duyê ̣t theo thứ tự giữa xuất hiê ̣n theo thứ tự tăng dần.
Duyê ̣t thứ tự sau (post-order traversal): Duyê ̣t cây con trái theo thứ tự sau Duyê ̣t cây con phải theo thứ tự sau Thăm gốc
Kết quả duyê ̣t cây theo thứ tự sau: 1, 4, 7, 6, 3, 13, 14, 10, 8. Trong cách duyê ̣t này, gốc được thăm sau cùng.
Nhận xét: - Khi duyệt trung tự (InOrder) cây BST ta được một dãy có thứ tự tăng. Cài đặt bằng C của hai cách duyệt sau được dành cho các bạn độc giả như mô ̣t bài tâ ̣p.