Bonjour,

J'ai un exo à résoudre, j'ai trouvé une solution mais je n'en suis pas satisfait.
L'objectif est de parcourir un arbre de "node" en utilisant la méthode "next".

ps: mon code est en Ruby.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Node
 
  def initialize(name, nodes
    @name = name
    @nodes = nodes
  end
end
 
class Iterator
  def initialize(node)
    @node = node
  end
 
  def next
    ???
  end
end
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
z = Noe.new("z", [])
b = Node.new("b", [z])    
c = Node.new("c", [])
parent = Node.new("a", [b, c]) 
 
iterator = Iterator.new(parent)
str = ''
next = iterator.next
while next do
 str += next.name
 next = iterator.next
end
str == 'abzc'

Voila ma solution:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class Iterator
 
  def initialize(node)
    @node   = node
    @index  = -1
    @list   = []
 
    traverse(@node)
  end
 
  def next
    @index += 1
    @list[@index]
  end
 
  private
  def traverse(root)
    @list[@list.size] = root
    if root.nodes
      for n in root.nodes do
        traverse(n)
      end
    end  
  end
 
end
Le problème avec ma solution est que l'arbre peut être très grand et donc ma solution utilise beaucoup de mémoire.

Quelqu'un aurait-il une approche sans construire une liste?