假设我有:
Class Folder{
int id;
String name;
Folder subFolder;
}
我怎么能显示文件夹的层次结构,假设我不知道有多少个子文件夹。例如:
我正在寻找使用递归函数的算法解决方案。 这是我的尝试:
function displaySubFolders(Folder f){
print(f.name);
if(f.subFolder is NULL) {return 0;}
else{
displaySubFolders(f.subFolder);
}
}
答案 0 :(得分:3)
一个简单的递归解决方案:
public void printHierarchy(Folder f){
if(f == null) {
return;
}
f.display();
printHierarchy(f.subFolder);
}
答案 1 :(得分:2)
如果我正确地解释你的问题,看起来你所拥有的是一个链表,其中每个父母只有一个孩子。在这种情况下,完全避免递归可能更有效(尽管稍后将更难扩展到多个后代。我想,递归对于它更具扩展性。)
function display_hierarchy(Folder folder) {
while (folder is not NULL) {
print folder.name;
folder = folder.subFolder;
}
}
这样做的主要优点是无论链表有多大,计算所需的内存量都保持不变。然而,递归策略在递归时会占用越来越多的堆栈空间。
答案 2 :(得分:1)
这个怎么样?
function displaySubFolders(Folder f, string indent){
print(indent);
print(f.name);
if(f.subFolder is NULL) {return 0;}
else{
displaySubFolders(f.subFolder, indent+" ");
}
}
打印
FolderA
FolderB
FolderC
FolderD
如果A
包含B
和D
,则B
包含C
您可以使用"--"
,"**"
或任何您想要的内容替换空格。