Computer >> Máy Tính >  >> Lập trình >> C ++

Xóa cây nhị phân bằng cách sử dụng từ khóa xóa trong C ++?

Đầu tiên chúng ta hãy xác định cây nhị phân của mình bằng cách sử dụng một lớp chứa dữ liệu int, btree_node * rightChild, btree_node * leftChild. LeftChild và rightChild là các con trỏ đến btree_node. Tất cả các thành viên trong lớp của chúng tôi là công khai.

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

Để tạo một nút mới, chúng ta có hàm khởi tạo lấy giá trị int làm tham số để gán nó cho giá trị nút mới được tạo. LeftChild và rightChild được đặt thành null.

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

Lớp giải mã lệnh xóa phần tử con bên trái và bên phải của cây nhị phân bằng cách sử dụng từ khóa delete khi được gọi.

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

Để kích hoạt xóa cây, chúng tôi gọi là xóa trên nút gốc vì cây con bên trái và bên phải của nó sẽ bị xóa cùng.

delete root;

Ví dụ

Hãy để chúng tôi xem cách triển khai sau để xóa cây nhị phân bằng cách sử dụng từ khóa xóa -

#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;
}

Đầu ra

Đoạn mã trên sẽ tạo ra kết quả sau -

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