コンピュータのディレクトリを格納するために n 個の子のツリーを作成しています。現在、概念は単純にツリーを作成することであり (もちろん BT ではありません)、各ノードには子も含まれます。以下のコードを検討してから、問題を説明します。最初にこれを考慮してください:
C/users/DeadCoder/Movies/Batman.
これmain.cpp
で、すべての C、users、DeadCoder、Movies、Batman が 1 つのベクトルになり、2 つのペアが挿入 Func で送信されます。もしroot==NULL
; Cを挿入するだけです。次回はCとユーザーが行きます。C が検索され、それに応じてユーザーが挿入されます。コードを見てみましょう。
template <class T>
struct Node;
template <class T>
class tree
{
Node<T> *root;
public:
tree();
~tree();
int insert(T str, T str1);
Node<T> *getRoot();
Node<T> *search(T item, Node<T> *tempPtr);
};
template <class T>
struct Node{
T n;
Node<T> *sibling;
tree<T> children; // SEE my each node has children.
Node(T N){
this->n = N;
this->sibling = NULL;
}
};
// .cpp ファイル内。// 初期化子
template <class T>
tree<T>::tree() // Constructor Initialization.
{
root=NULL;
}
// 関数を挿入します。
template <class T>
int tree<T>::insert(T push, T find)
{
Node<T> *rPtr = root;
if (rPtr==NULL){
//ROOT is NULL. C needs to be inserted which is in find.
Node<T> *pusPtr = new Node<T>(find);
root = pushPtr;
root->sibling=NULL;
return 0;
}
else if(rPtr!=NULL){
Node<T> *pushPtr = new Node<T>(push);
Node<T> *temp2 = search(find, root);
Node<T> *temp = temp2->children.getRoot(); // say it LINE_40.
if (temp==NULL){
temp = pushPtr;
temp->sibling=NULL;
return 1;
}
// children are already present.
else if(temp!=NULL){
// You don't need to know code for this part.
}
}//if.
}
// 検索機能。
template <class T>
Node<T> *tree<T>::search(T data, treeNode<T>* N)
{
if (N->n==data){ // where n represent directory.
return N; // data found.
}//if....
else{
Node<T> *child = N->children.getRoot();
// This is where i get Segmentation fault,
// because child is ==NULL; but you see in LINE_40 I did insert the child for C.
if(child!=NULL){ // say it line 80.
search(data, child);
}//if...
if(child->sibling!=NULL){
search(data, child->sibling);
}
}
}// search....
問題:C
挿入されました。Users
挿入されます。行 80 の検索機能では、C の子を検索するようになり、行 40 に挿入したようにユーザーである必要があります。しかし、代わりに、child==NULL と表示されます。私は何時間もデバッグしてきましたが、なぜそう言っているのかわかりません。誰もが問題を解決できることを願っています。ここで、C の子が NULL であると見なされる理由を本当に知る必要があります。それはユーザーでなければなりません。誰でも何が問題なのかわかりますか???? ヘルプ !!!!