C ++
 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;
}

クラスdeconstructorは、呼び出されたときにdeleteキーワードを使用して、バイナリツリーの左右の子を削除します。

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

ツリーの削除をトリガーするために、ルートノードでdeleteを呼び出します。これは、その左右のサブツリーが一緒に削除されるためです。

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

  1. C++での二分木の剪定

    バイナリツリーのヘッドノードルートがあり、さらにすべてのノードの値が0または1であるとします。1を含まないすべてのサブツリーが削除された同じツリーを見つける必要があります。したがって、ツリーが次のような場合- これを解決するには、次の手順に従います- 再帰メソッドsolve()を定義します。これにより、ノードが取得されます。メソッドは次のようになります- ノードがnullの場合、nullを返します ノードの左側:=solve(ノードの左側) ノードの権利:=solve(ノードの権利) ノードの左側がnullで、ノードの右側もnullで、ノード値が0の

  2. C++の二分木で最も近い葉を見つけます

    1つの二分木が与えられたとします。さまざまなレベルのリーフノードがあります。ノードを指す別のポインターが与えられます。尖ったノードから最も近いリーフノードまでの距離を見つける必要があります。ツリーが以下のようであると考えてください- ここで、リーフノードは2、-2、および6です。ポインタがノード-5を指している場合、-5から最も近いノードは距離1になります。 これを解決するために、指定されたノードをルートとするサブツリーをトラバースし、サブツリー内で最も近いリーフを見つけて、距離を保存します。ここで、ルートからツリーをトラバースします。ノードxが左側のサブツリーに存在する場合は、右側