Làm việc để triển khai BST của riêng tôi trong C++ cho trải nghiệm xử lý các cấu trúc như vậy.Binary Search Tree Destructor
Tôi gặp sự cố khi triển khai trình phá hủy. Tôi tìm thấy trong các nghiên cứu của tôi, người ta không thể có một destructor đệ quy (do một lá cờ không cho phép destructor được gọi trên cùng một đối tượng sau khi đã được gọi), nhưng tôi không thực sự chắc chắn của bất kỳ cách khác để làm sạch thành công tất cả các nút trong cây.
Để bù lại, tôi đã tạo một hàm trợ giúp - tuy nhiên điều này sẽ ném ra một lỗi ngoài chưa được giải quyết trên dòng 'xóa n'. Có lời khuyên nào không?
Code:
void BinSearchTree::Clear(tNode* n)
{
if (n->left != NULL)
Clear(n->left);
if (n->right != NULL)
Clear(n->right);
delete n;
n = NULL;
size--;
}
Không có gì liên quan đến vấn đề này, nhưng bạn không cần phải đặt biến 'n' thành NULL, vì nó không được truy cập nữa trong hàm. –
@JoachimPileborg Trạng thái rỗng được thiết lập chỉ vì Clear có thể được gọi độc lập với hàm hủy để thiết lập lại cây. Ban đầu tôi đã thử nghiệm vì thiếu một con trỏ gốc hợp lệ để xác định xem cây đã được khởi tạo chưa, trước khi có một thành viên dữ liệu kích thước để theo dõi những thứ như vậy. – DivinusVox
Ngoài sự tò mò, có ai biết nếu kích thước thường là giá trị được theo dõi trong việc triển khai cây tiêu chuẩn? Tôi thấy ít sử dụng cho nó, vì một vòng lặp lặp lại không thực tế trên mô hình. – DivinusVox