Hmm. To be very, very, very frank, If I wanted binary trees for something, I'd let the Berkeley DB do this for me. There's people way better at making efficient data structures out there. Da Pondelok 13 Februr 2006 03:38 frank napsal: > I am afraid that I should be using struct or they may > be a better way to describe my tree structures rather than using > numbered and linked lists. Any information on using struct in ruby or > pointer equivalents would be appreciated. I am trying to come up with > a way of doing this such that I could use it on trees of any size. > Right now I am using arrays and the bookkeeping is getting tricky. > I smell C. There are no pointer equivalents. Or rather, there's nothing else, but it shouldn't matter anyway. Ruby has by-reference semantics, variables hold references to objects. Which isn't -quite- true, but let's say it is for now. Classes are your friends. But I'll let the code do the talking. If you find you don't understand something, I recommend you read the Pickaxe book, available for free online in the first edition, which is probably enough for now. As a matter of fact, you should read it anyway, with nothing insulting in mind, you have a little to learn about this gem of a language that is Ruby. (Did I just make a pun?) # A node of a binary tree. class Node attr_reader :left attr_reader :right attr_accessor :value attr_accessor :parent def left=(node) @left = node left.parent = self end def right=(node) @right = node right.parent = self end # Recursively duplicate a node. def initialize_copy(node) self.value = node.value self.left = node.left.dup if node.left self.right = node.right.dup if node.right end def initialize(new_value = nil) self.value = new_value end # The recursive string conversion. def to_s "(" + [left, value, right].join(", ") + ")" end end Calling Node#dup should duplicate a (sub) tree properly. David Vallner