# This file contains the Ruby code from book of # "Data Structures and Algorithms # with Object-Oriented Design Patterns in Ruby" # by Bruno R. Preiss. # # Copyright (c) 2004 by Bruno R. Preiss, P.Eng. All rights reserved. class BinaryTree < Tree def initialize(*args) super() case args.length when 0 @key = nil @left = nil @right = nil when 1 @key = args[0] @left = BinaryTree.new @right = BinaryTree.new when 3 @key = args[0] @left = args[1] @right = args[2] else raise ArgumentError end end def purge @key = nil @left = nil @right = nil end def left raise StateError if empty? @left end def right raise StateError if empty? @right end def left raise StateError if empty? @left end def right raise StateError if empty? @right end def compareTo(bt) assert { is_a?(obj.type) } if empty? if bt.empty? return 0 else return -1 end elsif bt.empty? return 1 else result = @key <=> bt._key result = @left <=> bt._left if result == 0 result = @right <=> bt._right if result == 0 return result end end end