2016-06-29 13 views
0

Angenommen, ich habe:Lösung mit einer rekursiven Funktion

Class Folder{ 
    int id; 
    String name; 
    Folder subFolder; 
} 

Wie kann ich Ordner der Hierarchie angezeigt werden, vorausgesetzt, dass ich weiß nicht, wie viele Unterordner sind. Zum Beispiel:

  1. FolderA enthält FolderB (2 Ebenen)
  2. FolderA enthält FolderB die FolderC (3 Stufen) enthält.

Ich suche eine algorithmische Lösung mit einer rekursiven Funktion. Dies ist mein Versuch:

function displaySubFolders(Folder f){ 
    print(f.name); 
    if(f.subFolder is NULL) {return 0;} 
    else{ 
     displaySubFolders(f.subFolder); 
    } 
} 
+0

Ich weiß nicht, vielleicht, wenn Sie einen Unterordner haben, sollten Sie diesen Unterordner zur Anzeige bitten? – Will

+0

Ich muss übergeordnetes FolderA Name anzeigen -> FolderB Name -> FolderC Name (Name des übergeordneten Ordners -> Name des untergeordneten Ordners -> Name des großen untergeordneten Ordners). Nicht notwendigerweise eine Drei-Ebenen-Hierarchie, es könnte 5, 6 oder mehr sein. –

+0

Sie iterieren nie über Kinder von 'f'. Sie sollten das tun, um alle Unterordner zu finden. – Vesper

Antwort

2

Wenn ich Ihre Frage richtig interpretiere, sieht es so aus, als ob Sie eine verkettete Liste haben, in der jeder Elternteil nur ein Kind hat. In diesem Fall kann es effizienter sein, Rekursion ganz zu vermeiden (obwohl dies schwieriger sein würde zu mehreren Nachkommen auf später zu erweitern. Rekursion ist erweiterbar für das, glaube ich.)

function display_hierarchy(Folder folder) { 
    while (folder is not NULL) { 
     print folder.name; 
     folder = folder.subFolder; 
    } 
} 

Die primären Vorteile Unabhängig davon, wie groß die verknüpfte Liste ist, bleibt die für die Berechnung gehaltene Speichermenge konstant. Eine rekursive Strategie verbraucht jedoch mehr und mehr Stapelspeicher, wenn sie rekursiv ist.

+0

Wenn die Frage nicht sehr wichtige Details darüber enthält, was ein Ordner tatsächlich enthält, ist dies die richtige Antwort auf bestimmte Frage. Sofern Sie nicht über ein Array von Unterordnern verfügen, müssen Sie nicht über Unterordner iterieren, und die Rekursion würde Ihren Aufruf-Stack unnötig überladen. – Omnilord

3

Eine einfache rekursive Lösung:

public void printHierarchy(Folder f){ 
    if(f == null) { 
     return; 
    } 
    f.display(); 
    printHierarchy(f.subFolder);   
} 
1

Wie wäre das?

function displaySubFolders(Folder f, string indent){ 
    print(indent); 
    print(f.name); 
    if(f.subFolder is NULL) {return 0;} 
    else{ 
     displaySubFolders(f.subFolder, indent+" "); 
    } 
} 

druckt

FolderA 
    FolderB 
     FolderC 
    FolderD 

wenn AB und D enthält, enthalten BC

Sie könnten Raum ersetzen mit "--", "**" oder was auch immer Sie wollen.

Verwandte Themen