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

กำลังลบไบนารีทรีโดยใช้คีย์เวิร์ด delete ใน C ++ หรือไม่


ให้เรากำหนดไบนารีทรีของเราก่อนโดยใช้คลาสที่มีข้อมูล int, btree_node * rightChild, btree_node * leftChild leftChild และ rightChild เป็นตัวชี้ไปยัง btree_node สมาชิกทุกคนในชั้นเรียนของเราเป็นแบบสาธารณะ

class btree_node {
   public:
      int data;
      btree_node* leftChild;
      btree_node* rightChild;

สำหรับการสร้างโหนดใหม่ เรามีฟังก์ชันตัวสร้างที่ใช้ค่า int เป็นพารามิเตอร์เพื่อกำหนดให้กับค่าโหนดที่สร้างขึ้นใหม่ leftChild และ rightChild ถูกตั้งค่าเป็น null

btree_node(int data){
   this->data = data;
   this->leftChild = NULL;
   this-> = NULL;
}

deconstructor คลาสลบลูกด้านซ้ายและขวาของต้นไม้ไบนารีโดยใช้คำสำคัญ delete เมื่อถูกเรียกใช้

~btree_node(){
   delete leftChild;
   delete rightChild;
   cout << this->data << "is being deleted"<<endl;
}

ในการทริกเกอร์การลบทรี เราเรียกการลบบนโหนดรูท เนื่องจากทรีย่อยด้านซ้ายและขวาจะถูกลบไปด้วย

delete root;

ตัวอย่าง

ให้เราดูการใช้งานต่อไปนี้สำหรับการลบต้นไม้ไบนารีโดยใช้คำสำคัญ delete -

#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