2
class Tree
attr_accessor :children, :node_name
def initialize(tree_hash={})
tree_hash.each do |k,v|
@node_name = k
@children = v.map { |k,v| Tree.new(k,v) }
end
end
def visit_all(&block)
visit &block
children.each {|c| c.visit_all &block}
end
def visit(&block)
block.call self
end
end
ruby_tree = Tree.new({'grandpa' => {'dad' => {'child 1' => {}, 'child 2' => {} },'uncle' => {'child 3' => {}, 'child 4' => {} } } })
puts "Visiting a node"
ruby_tree.visit {|node| puts node.node_name}
puts
puts "visiting entire tree"
ruby_tree.visit_all {|node| puts node.node_name}
和錯誤消息:(我使用紅寶石1.9.2)紅寶石樹類,爲什麼它說在初始化時有2個參數而不是1?
C:\紅寶石>紅寶石tree.rb
tree.rb:4:在`初始化」 :錯誤的參數數目(2 1)(引發ArgumentError)
from tree.rb:7:in `new' from tree.rb:7:in `block (2 levels) in initialize' from tree.rb:7:in `each' from tree.rb:7:in `map' from tree.rb:7:in `block in initialize' from tree.rb:5:in `each' from tree.rb:5:in `initialize' from tree.rb:21:in `new' from tree.rb:21:in `<main>'
我想從哈希實現一棵樹。你可以在ruby_tree變量中看到一個例子。 – stanm87
我認爲這是一棵二叉樹?大多數教科書實現將節點的邏輯封裝在單獨的類中。但是,您需要執行一個根節點和左右子節點的概念。使用哈希實例化您的樹可能會變得非常脆弱。 –
這是7周內編程書籍7種編程語言的練習。目標是實現Tree類,以便它接受一個Hash作爲用戶界面。這意味着它們將是哈希中的1個根節點。感謝您的回答,它現在正在工作 – stanm87