#BST0000010. Xóa nút có hai con (Delete a Two-Child Node from a BST)
Xóa nút có hai con (Delete a Two-Child Node from a BST)
Xóa nút có hai con (Delete a Two-Child Node from a BST)
Nguồn: Phước Hưng OJ
Phiên bản: Phước Hưng OJ Extended
Đề bài
Dựng BST từ dãy theo đúng thứ tự chèn; khóa trùng bị bỏ qua.
Cho khóa được bảo đảm tồn tại và nút mang khóa có đúng hai con. Để kết quả của thao tác xóa được xác định duy nhất, bắt buộc dùng inorder successor của : đó là nút có khóa nhỏ nhất trong cây con phải của .
Thay khóa tại vị trí của bằng khóa của successor, sau đó xóa nút successor ở vị trí cũ của nó. Cây sau thao tác vẫn phải là một BST.
Hãy in preorder của cây sau khi xóa.
Input
Dòng đầu chứa số nguyên .
Dòng thứ hai chứa số nguyên theo thứ tự chèn.
Dòng thứ ba chứa khóa cần xóa.
Output
In các khóa của cây sau thao tác xóa theo preorder, các khóa cách nhau bởi một dấu cách.
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; khóa trùng bị bỏ qua khi dựng cây; tồn tại và nút mang khóa có đúng con.
Ví dụ
Input
7
8 3 10 1 6 14 4
3
Output
8 4 1 6 10 14
Giải thích
Nút có hai con. Cây con phải của có các khóa và , trong đó khóa nhỏ nhất là , nên là inorder successor của .
Khóa thay thế vị trí của , rồi nút cũ được xóa. Preorder của cây kết quả là 8 4 1 6 10 14.