0

50 個の確率変数を使用して二分探索木を作成しようとしています。コードを書きましたが、確率変数が宣言されていません。助けてください

#include <iostream>
#include <cstdlib>
using namespace std;

// value、rlink が指す値を格納する rvalue と llink が指す値を格納する lvalue を含むクラス ノードを作成する

class node


{
private:
int value;
int rvalue;
int lvalue;
node *rlink;
node *llink;

public:

void insertnode(node*,int);
node *create(node*,int); 

};



void node::insertnode(node *h,int k)

{

h=new node;
h->value=k;
h->rlink=NULL;
h->llink=NULL;
h->rvalue=0;
h->lvalue=0;

}


node *node::create(node*root, int i)

{

int A[i];
for(int j=0; j<i; j++) {
    A[j]=rand()%1000;  //stores random values in array
    cout<<A[j];

}
node *k;
node *h;
insertnode(root, A[0]);

cout<<h->value;

for (int j=1; j<i; j++) {
    if(A[j]<h->value){
        if(h->llink==NULL) {
            insertnode(k, A[j]);
            h->lvalue=k->value;

        }
        h->llink=k;
    }
    else if(A[j]>h->value)
    {
        if(h->rlink==NULL) {
            insertnode(k, A[j]);
            h->rvalue=k->value;

        }
        h->rlink=k;

    }


} 

return root;


}


int main()

{


int i;
cout<<"enter the number of elements in a matix";
cin>>i;
node s;
node *h;
h=s.create(h,i);

}
4

2 に答える 2

0

関数 create() では、ノードへのポインタである変数 k と h を使用しています。ただし、この変数を初期化しておらず、それらのポインターにスペースを割り当てていません。まず、この変数にメモリを割り当てます。

于 2012-04-10T16:58:07.217 に答える
0

コードにはかなりの問題があります。

  • ノードを作成するには、指定された値の新しいノードを作成するだけです (これはコンストラクターで行う必要があります。ノード クラスの他の値は、ノードがツリーに挿入されるときに初期化されます)。
  • ノードを挿入するには、常にツリーのルート (またはツリー自体への参照) と挿入するノードを渡してから、挿入メソッドでノードを挿入する場所を見つける必要があります (これは、エニー バランシングを行う場所でもあります)。必要であれば)
  • ツリー アプローチを使用する場合 (これをお勧めします)、ツリーにはそのルートへの参照と、場合によってはその中のノードの数が必要です。
  • ランダムなノードを生成するには、配列を使用する必要はありません。新しいランダムな値を取得し、そのノードを作成して、それをリストに挿入する必要があります

この最後の部分を行うには、次のようにします (C++ を想定)

int main() { 
  Tree *tree = new Tree(); //This creates a tree (you will need to create a tree class with a constructor
  int total = 50; //This the number of nodes you want store this however is necessary
  ....
  srand(time(NULL));
  for(int i = 0; i < total; i++) {
     int val = rand() % 1000 + 1; //This gets a number between 1-1000
     Node *node = new Node(val); //This constructs the node (write this constructor)
     tree.insertNode(node); //This will insert the node into the tree (write this method)
  }
  ....
}

これにより、Node と Tree のコンストラクターと insertNode メソッドの単語を想定して、50 個の値を持つツリーが作成されます。

于 2012-04-10T17:06:28.017 に答える