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 endstr == 'abzc'
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
Voila ma solution:
Le problème avec ma solution est que l'arbre peut être très grand et donc ma solution utilise beaucoup de mémoire.
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
Quelqu'un aurait-il une approche sans construire une liste?
Partager