我正在制作一棵包含 n 个孩子的树来存储计算机目录。现在,概念只是制作一棵树(当然不是 BT),每个节点也会有子节点。考虑下面的代码,然后我将解释这个问题。首先考虑这个:
C/users/DeadCoder/Movies/Batman.
现在在我main.cpp
的向量中,我有所有 C、用户、DeadCoder、电影、蝙蝠侠,然后我在插入函数中发送两对。如果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 child 设为 NULL,它必须是用户。任何人都可以看到什么问题????帮助 !!!!