Martin wrote: > Hi all! > > I'm a newbie in Ruby and I am trying to implement a Binary Tree. > However, it doesn't work. Could someone please help me? > > Thank you ! > > class Node > attr_accessor :left, :right, :key, :data > > def initialize(key, data) > @left = nil > @right = nil > @key = key > @data = data > end > > def to_s() > print "Key = ", @key, " Data = ", @data > end > end > > class Tree > attr_accessor :root > > public > def initialize() > @root = nil > print "Root Object Id ", @root.object_id, "\n" > end > > def insert(newNode) > insertNode(@root, newNode) > end > > def visit() > visitNode(@root) > end > > private > def insertNode(node, newNode) > print "Node Object Id ", node.object_id, "\n" > print "New Node Object Id ", newNode.object_id, "\n" > if (node == nil) > node = newNode > print "Node Affected Object Id ", node.object_id, "\n" > print @root > print node > else > if (newNode.data <= node.data) > insertNode(node.left, newNode) > print "Gauche" > else > insertNode(node.right, newNode) > print "Droite" > end > end > end > > def visitNode(node) > if (node != nil) > print node.key > > if (node.left != nil) > visitNode(node.left) > end > > if (node.right != nil) > visitNode(node.right ) > end > end > end > end > > > arbre = Tree.new > arbre.insert(Node.new(1, "un")) > arbre.insert(Node.new(2, "deux")) > arbre.insert(Node.new(3, "trois")) > > arbre.visit() > Martin, In short, I don't know how to fix it. But the problem is with this line: node = newNode It doesn't seem to do what you want. I think it takes the reference variable "node" (previously pointing at @root, until the method recurses) and point it at a new variable ("newNode"). That isn't what you want--you want to replace the contents of the node, not change the reference. I don't know how to do this. I got something by changing the above line to "@root = newNode", but that really breaks the algorithm. Dan Zwell