#BST0000001. Đường tìm kiếm trong BST (BST Search Path)
Đường tìm kiếm trong BST (BST Search Path)
Đường tìm kiếm trong BST (BST Search Path)
Nguồn: Phước Hưng OJ
Phiên bản: Phước Hưng OJ Extended
Đề bài
Cây tìm kiếm nhị phân (Binary Search Tree - BST) là cây nhị phân trong đó, với mỗi nút có khóa , mọi khóa trong cây con trái đều nhỏ hơn và mọi khóa trong cây con phải đều lớn hơn .
Ban đầu cây rỗng. Các khóa được chèn lần lượt theo đúng thứ tự đã cho. Khi chèn một khóa , bắt đầu từ gốc: nếu nhỏ hơn khóa tại nút hiện tại thì đi sang con trái; nếu lớn hơn thì đi sang con phải. Khi gặp vị trí con rỗng, tạo nút mới tại vị trí đó. Nếu khóa đã tồn tại trong cây thì lần chèn đó bị bỏ qua và cấu trúc cây không thay đổi.
Sau khi dựng cây, cần tìm khóa truy vấn . Quá trình tìm kiếm cũng bắt đầu từ gốc và dùng cùng quy tắc so sánh. Hãy in toàn bộ các khóa của những nút được thăm, theo đúng thứ tự từ gốc đến vị trí quá trình tìm kiếm kết thúc.
Nếu gặp nút có khóa bằng , trạng thái cuối là FOUND. Nếu đi đến một nhánh rỗng mà chưa gặp , trạng thái cuối là NOT FOUND.
Input
Dòng đầu chứa số nguyên — số khóa được đưa vào quá trình dựng cây.
Nếu , dòng tiếp theo chứa số nguyên theo thứ tự chèn. Nếu , dòng này không xuất hiện.
Dòng cuối chứa số nguyên — khóa cần tìm.
Output
Nếu cây không rỗng, in trên một dòng các khóa của những nút được thăm, cách nhau bởi một dấu cách, sau đó in trạng thái FOUND hoặc NOT FOUND.
Nếu cây rỗng, không có nút nào được thăm; khi đó chỉ in:
NOT FOUND
Subtask
Subtask 1 (20 điểm): .
Subtask 2 (30 điểm): .
Subtask 3 (50 điểm): .
Trong tất cả các subtask, và là số nguyên có dấu 64-bit, tức . Khóa trùng trong dãy chèn bị bỏ qua.
Ví dụ
Input
7
8 3 10 1 6 14 4
6
Output
8 3 6 FOUND
Giải thích
Khóa đầu tiên trở thành gốc. Khi tìm , trước hết thăm nút . Vì , chuyển sang cây con trái và thăm nút . Vì , chuyển sang cây con phải và gặp nút .
Các nút được thăm lần lượt là và khóa cần tìm đã xuất hiện, nên trạng thái cuối là FOUND.