基本的な二分探索木の次の Ruby 実装を作成しました。
rt = Node.new(data)
基になるオブジェクトを実際に変更しているのではなく、実際には破棄される一時変数にすぎないと思います。
#!/usr/bin/env ruby
class Node
attr_accessor :left, :right, :data
def initialize(d)
@left = nil
@right = nil
@data = d
end
end
class BST
attr_accessor :root
def initialize
@root = nil
end
def add_helper(rt, d)
if rt != nil
add_helper(rt.left, d) if d < rt.data
add_helper(rt.right, d) if d > rt.data
end
rt = Node.new(d)
end
def add(data)
add_helper(root, data)
end
def print_helper(rt)
return if rt == nil
pr(rt.left) if rt.left != nil
puts rt.data
pr(rt.right) if rt.right != nil
end
def print_tree
print_helper(root)
end
end
###########################
b = BST.new
b.add(5)
b.add(-10)
b.print_tree
実装の何が問題になっていますか? 私はデバッグする必要があることを知っており、実際にデバッグしています。私は print ステートメントを入れましたが、最終的に Node オブジェクト自体でさえ、すべてがまだ nil であることに気付きました。