Toon posts:

[java] recursief initialiseren van een tree structure

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een recursief datamodel, waarbij ik de klasse Item heb gedefinieerd.
Deze klasse Item heeft een 1-N relatie naar zichzelf. (Recursief dus).

Nu wil ik graag een algoritme schrijven waarmee ik een tree kan initialiseren, ik heb echter de volgende requirement:

Ik wil graag het 'level' specificeren. Wanneer ik de tree initialiseer met level 3, betekent dit dat ik een tree creeer van 3 levels diep, waarbij elke node exact 3 childs heeft.

Ik probeer dit recursief voor elkaar te krijgen, maar het lukt me telkens niet, ik eindig telkens in een oneindig loopje of iets dergelijks....

Kan iemand mij een tip geven hoe ik dit voor elkaar kan krijgen?

  • grhmpf
  • Registratie: December 2000
  • Laatst online: 29-05-2022

grhmpf

Android <3

Wat dacht je van bij het aanmaken het level mee te sturen + max level. Je stopconditie is dan als level+1 > maxlevel.

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 13:08

Janoz

Moderator Devschuur®

!litemod

Of nog makkelijker

Psuedo code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
init(levels){
  return init(levels, levels);
}

init(levels, children){
  new item
  if (levels > 0){
    for (i = 0..children){
      item.add(new item(levels-1,children))
    }
  }
  return item
}


offtopic:
dus eigenlijk ongeveer wat bovenbuurman zegt

[ Voor 19% gewijzigd door Janoz op 22-03-2006 10:18 ]

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

Topicstarter
Gelukt! Na jullie tips heb ik het alsvolgt weten op te lossen:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    public static Item createItem(int levels) {
        return init(levels, levels);
    }
    
    public static Item init(int levels, int children) {
        Item item = new Item();
        if (levels > 0) {
            item.setItems(new Item[children]);
            for (int i = 0; i < children; i++) {
                item.getItems()[i] = init(levels - 1, children);
            }
        }
        return item;
    }