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

การลบต้นไม้ไบนารี (Binary Tree) ด้วยคีย์เวิร์ด delete ใน C++

ใน C++ เราสามารถลบต้นไม้ไบนารีทั้งหมดได้อย่างมีประสิทธิภาพโดยใช้ Destructor ร่วมกับคีย์เวิร์ด delete บนโหนดราก (root node) ซึ่งจะเรียก destructor แบบเวียนเกิด (recursive) ไปยังโหนดลูกทั้งหมด

โครงสร้างโหนด (Node Structure)

class btree_node {
public:
    int data;
    btree_node* leftChild;
    btree_node* rightChild;
    
    // Constructor
    btree_node(int data) {
        this->data = data;
        this->leftChild = NULL;
        this->rightChild = NULL;
    }
    
    // Destructor - ลบลูกซ้ายและขวาเมื่อถูกเรียก
    ~btree_node() {
        delete leftChild;
        delete rightChild;
        cout << this->data << " is being deleted" << endl;
    }
};

ตัวอย่างการใช้งาน

#include <iostream>
using namespace std;

class btree_node {
public:
    int data;
    btree_node* leftChild;
    btree_node* rightChild;
    
    btree_node(int data) {
        this->data = data;
        this->leftChild = NULL;
        this->rightChild = NULL;
    }
    
    ~btree_node() {
        delete leftChild;
        delete rightChild;
        cout << this->data << " is being deleted" << endl;
    }
};

int main() {
    // สร้างต้นไม้
    btree_node* root = new btree_node(2);
    btree_node* node1 = new btree_node(4);
    btree_node* node2 = new btree_node(6);
    btree_node* node3 = new btree_node(8);
    btree_node* node4 = new btree_node(10);
    
    root->leftChild = node1;
    root->rightChild = node2;
    node1->leftChild = node3;
    node1->rightChild = node4;
    
    // ลบต้นไม้ทั้งหมด - เริ่มจากราก
    delete root;
    
    return 0;
}

ผลลัพธ์

8 is being deleted
10 is being deleted
4 is being deleted
6 is being deleted
2 is being deleted

หลักการทำงาน: เมื่อ delete root ถูกเรียก Destructor ของ root จะทำงาน ซึ่งเรียก delete leftChild และ delete rightChild ทำให้ Destructor ของโหนดลูกทำงานต่อเนื่องกันจนครบทุกโหนด (Post-order traversal)