Avatar billede trn Nybegynder
07. marts 2006 - 15:28 Der er 10 kommentarer og
1 løsning

tree i java

Hej

Har i et eks. på hvordan man oprette et tree i java og hvordan man kan få det vist grafisk. Følgende er et eks på det jeg ønsker

      root
      / | \       
leaf1 leaf2 leaf3
  |          /  \
leaf4  leaf5  leaf6

Mvh
Tommy
Avatar billede schwarz84 Nybegynder
07. marts 2006 - 15:46 #1
import java.util.ArrayList;
public interface Node {
}

public class InnerNode implements Node {
private ArrayList<Node> = new ArrayList<Node>();
//Her laver du så nogle metoder til at tilføje og fjerne knuder, og evt give mulighed for at gemme data
}

public class Leaf implements Node {
//Her kan du så lave nogle metoder så et leaf kan indeholde data...
}

En visning kan hurtigt laves med et rekursivt gennemløb af træet som spytter strenge ud, du kan sætte sammen. Definer en metode på interfacet som for InnerNode's vedkommende kalder rekursivt på elementerne i listen og som for Leaf's vedkommende viser at der er tale om et blad...
Avatar billede schwarz84 Nybegynder
07. marts 2006 - 15:51 #2
En grafisk visning kan laves med værktøjet Graphviz. Det kræver at du spytter ovennævnte strenge ud i bestemt format. Så kan de gives til Graphiz som laver en grafisk visning. Se http://www.research.att.com/sw/tools/graphviz/ for dokumentation...
Avatar billede trn Nybegynder
08. marts 2006 - 12:45 #3
Kan du komme med lidt mere code ?
Avatar billede schwarz84 Nybegynder
08. marts 2006 - 19:48 #4
Joeh, men hvad skal det kunne? ;-)
Avatar billede trn Nybegynder
08. marts 2006 - 21:28 #5
Metoder til at oprette og fjerne elementer kunne være en god start.
Avatar billede thomaswinterberg Nybegynder
08. marts 2006 - 21:29 #6
Med hensyn til at oprette et træ. Kan du med fordel se på følgende link: Hvordan du opretter et træ.  parents, children og hvordan du traverser træet.

http://www.faqs.org/docs/thinkjava/chap17.htm
Avatar billede schwarz84 Nybegynder
08. marts 2006 - 22:21 #7
trn: Det er jo bare en liste. Metoden:

public void addNode(Node n) {
nodeList.add(n);
}

kunne jo så tilføje en knude i træet (hvis listen over knuder hedder nodeList. Jeg glemte at navngive den) og tilsvarende kunne du jo så lave en removeNode som løber listen igennem og fjerner den ønskede knude.

Et gennemløb af træet kan laves sådan her (for innerNode):

public void traverse() {
  for (Node n: nodeList) {
    n.traverse();
  }
}

og for Leaf, kan du så skrive værdien ud på skærmen eller noget andet...
Avatar billede schwarz84 Nybegynder
08. marts 2006 - 22:22 #8
ovenstående traverse kræver selvfølgelig at du tilføjer linjen:
public void traverse();
til Node interfacet...
Avatar billede schwarz84 Nybegynder
08. marts 2006 - 22:25 #9
Vær opmærksom på at thomas' link kun fortæller om binære træer. Listen i mit forslag bruges for at kunne understøtte et vilkårligt antal børn i hver knude (som dit originale træ viser). Det ændrer noget på hvordan man behandler knuderne når man løber dem igennem osv. Der handler det om liste-operationer med mit forslag.
Avatar billede trn Nybegynder
10. marts 2006 - 07:13 #10
Tak for hjælpen.
Avatar billede schwarz84 Nybegynder
13. marts 2006 - 20:29 #11
Husk at acceptere svaret
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester