Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ลบ Binary Tree ด้วย Destructor และ delete keyword ใน C++

บทนำ

ใน C++ สามารถลบ Binary Tree ทั้งต้นได้อัตโนมัติโดยใช้ Destructor (~) ในคลาส Node เมื่อเรียก `delete root` จะเรียก destructor แบบ Recursive ลบลูกซ้าย ลูกขวา แล้วค่อยลบตัวเอง

หลักการทำงาน

  • Destructor ชื่อ ~Node()
  • ใน destructor: `delete left; delete right;` → เรียก destructor ของลูกซ้ำ
  • Post-order deletion: ลบลูกก่อน แล้วค่อยลบตัวเอง

ตัวอย่างโค้ด

#include <bits/stdc++.h>
using namespace std;

class Node {
public:
    int data;
    Node* left;
    Node* right;
    // Constructor
    Node(int data) {
        this->data = data;
        this->left = NULL;
        this->right = NULL;
    }
    // Destructor
    ~Node() {
        delete left;
        delete right;
        cout << "Deleted node with data " << this->data << endl;
    }
};

int main() {
    Node* root = new Node(1);
    root->left = new Node(2);
    root->right = new Node(3);
    root->left->left = new Node(4);
    root->left->right = new Node(5);
    root->right->left = new Node(6);
    root->right->right = new Node(7);
    // ลบทั้งต้นไม้
    delete root;
    return 0;
}

ผลลัพธ์

Deleted node with data 4
Deleted node with data 5
Deleted node with data 2
Deleted node with data 6
Deleted node with data 7
Deleted node with data 3
Deleted node with data 1

คำอธิบาย

ลำดับการลบ: Post-order (ลูกซ้าย → ลูกขวา → ตัวเอง) รับประกันว่าไม่มี memory leak และไม่ access freed memory

สรุป

RAII (Resource Acquisition Is Initialization) ใน C++: ใช้ Destructor จัดการหน่วยความจำอัตโนมัติ เขียนโค้ดสะอาด ป้องกัน Memory Leak