Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 delete 키워드를 사용하여 이진 트리를 삭제하시겠습니까?

<시간/>

먼저 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;
}

클래스 분해자는 호출될 때 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