具有无限子节点的树的递归函数。 C++
Recursive function of tree with infinite childs. c++
我创建了一个虚拟文件系统来模拟硬盘驱动器。我遇到的问题是,当我格式化此 "drive" 时,我需要遍历每个文件夹和子文件夹并删除我创建的 "files",然后删除文件夹而不会出现内存泄漏:)
我已经在这几个小时了,我试图制作递归函数,但它不会删除所有内容。它一直卡在某个地方:(
任何想法都会让我度过一周!!谢谢
这是我的 folder.h 和递归函数的代码示例。
folder.h :
#ifndef FOLDER_H
#define FOLDER_H
#include <iostream>
#include <string>
#include "file.h"
using namespace std;
class folder
{
private:
int CAP = 10;
int nrOfChildFolders;
int nrOfFiles;
string folderName;
folder * parentFolder;
folder * childFolder[10];
file * fileArray[10];
public:
folder();
folder(string folderName, folder * parent);
~folder();
void addFolder(string folderName);
void addFile(string fileName, int nr);
string getFolderAndFiles()const;
string getFolderName()const;
int getFileNr(string fileName)const;
void reset();
folder * getFolder(string name)const;
folder * getParentFolder()const;
void deleteFile(string name, int nr);
folder * getChildFolder(int pos);
int getNrOfChildFolders()const;
/* data */
};
#endif
递归函数:
void FileSystem::recursiveFolderSwitcher(folder * newCurrentFolder)
{
int folders = newCurrentFolder->getNrOfChildFolders();
if (newCurrentFolder->getNrOfChildFolders() != 0)
{
for (int i = 0; i < folders; i++)
{
newCurrentFolder = newCurrentFolder->getChildFolder(i);
recursiveFolderSwitcher(newCurrentFolder);
}
}
newCurrentFolder->reset();
}
谢谢 <3
您正在 for-loop 中重新分配 newCurrentFolder
。
newCurrentFolder = newCurrentFolder->getChildFolder(i);
这使得决赛
newCurrentFolder->reset()
改为重置最后一个 child。
使用
folder* child = newCurrentFolder->getChildFolder(i);
recursiveFolderSwitcher(child);
相反。
还有
if (newCurrentFolder->getNrOfChildFolders() != 0)
不需要,for-statement 会为您处理。
我创建了一个虚拟文件系统来模拟硬盘驱动器。我遇到的问题是,当我格式化此 "drive" 时,我需要遍历每个文件夹和子文件夹并删除我创建的 "files",然后删除文件夹而不会出现内存泄漏:) 我已经在这几个小时了,我试图制作递归函数,但它不会删除所有内容。它一直卡在某个地方:(
任何想法都会让我度过一周!!谢谢
这是我的 folder.h 和递归函数的代码示例。
folder.h :
#ifndef FOLDER_H
#define FOLDER_H
#include <iostream>
#include <string>
#include "file.h"
using namespace std;
class folder
{
private:
int CAP = 10;
int nrOfChildFolders;
int nrOfFiles;
string folderName;
folder * parentFolder;
folder * childFolder[10];
file * fileArray[10];
public:
folder();
folder(string folderName, folder * parent);
~folder();
void addFolder(string folderName);
void addFile(string fileName, int nr);
string getFolderAndFiles()const;
string getFolderName()const;
int getFileNr(string fileName)const;
void reset();
folder * getFolder(string name)const;
folder * getParentFolder()const;
void deleteFile(string name, int nr);
folder * getChildFolder(int pos);
int getNrOfChildFolders()const;
/* data */
};
#endif
递归函数:
void FileSystem::recursiveFolderSwitcher(folder * newCurrentFolder)
{
int folders = newCurrentFolder->getNrOfChildFolders();
if (newCurrentFolder->getNrOfChildFolders() != 0)
{
for (int i = 0; i < folders; i++)
{
newCurrentFolder = newCurrentFolder->getChildFolder(i);
recursiveFolderSwitcher(newCurrentFolder);
}
}
newCurrentFolder->reset();
}
谢谢 <3
您正在 for-loop 中重新分配 newCurrentFolder
。
newCurrentFolder = newCurrentFolder->getChildFolder(i);
这使得决赛
newCurrentFolder->reset()
改为重置最后一个 child。
使用
folder* child = newCurrentFolder->getChildFolder(i);
recursiveFolderSwitcher(child);
相反。
还有
if (newCurrentFolder->getNrOfChildFolders() != 0)
不需要,for-statement 会为您处理。