制作一个n个子目录树来存储计算机的目录



我正在制作一个由n个子项组成的树来存储计算机的目录。现在,概念是简单地创建一个树(当然这不是BT(,每个节点也将有子节点。考虑下面的代码,然后我将解释问题。首先考虑一下:

C/users/DeadCoder/Movies/Batman.

现在在我的main.cpp中,我在一个向量中有所有的C、用户、DeadCoder、电影、蝙蝠侠,然后我在插入Func中发送两对。如果CCD_ 2;它只会插入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的子项,它应该是Users,因为我已经将它插入了第40行。但相反,它说child==NULL。我已经调试了好几个小时了,我不知道为什么它会这么说。我希望每个人都能解决这个问题。现在我真的需要知道为什么关于C的child是NULL,它必须是用户。有人能看到问题出在哪里吗????救命!!!!

第42行什么都不做(我的意思是它没有副作用(。它只是把一个值放在一个临时变量中,然后离开。您可能希望您的temp是对根的引用。类似于:Node<T> *&temp =

你确定insert方法真的插入了这些元素吗?实现后置条件可能有助于验证您的方法是否真的履行了它们的约定(按约定设计(。通过这种方式,您将直接了解问题所在,在某些情况下,调试将是快速的或不必要的,因为您会收到日志消息,上面写着"此方法本应执行此操作,但未能执行",否则您将在数小时内查找问题的根源。

相关内容

最新更新