2009-02-01 65 views
3

我正在寫一個Ruby腳本,並想用一個N叉樹數據結構的「紅寶石」的方式。做一個N叉樹

是否有一個良好的實現,可以作爲源代碼?謝謝。

回答

11

爲了擴大對奧托的回答,得到一個哈希以一個簡單的方法自動vivify陣列是使用默認值塊與Hash::new,就像這樣:

node_children = Hash.new { |_node_children, node_key| _node_children[node_key] = [] } 

但實際上,該代碼取決於什麼你想用你的數組。您可以 設置它們與散列和數組,或做一些類:

class Node 
    attr_accessor :value, :children 
    def initialize(value, children=[]) 
     @value = value 
     @children = children 
    end 
    def to_s(indent=0) 
     value_s = @value.to_s 
     sub_indent = indent + value_s.length 
     value_s + @children.map { |child| " - " + child.to_s(sub_indent + 3) }.join("\n" + ' ' * sub_indent) 
    end 
end 

ROOT = Node.new('root', %w{ farleft left center right farright }.map { |str| Node.new(str) }) 
puts "Original Tree" 
puts ROOT 
puts 

ROOT.children.each do |node| 
    node.children = %w{ one two three four }.map { |str| Node.new(node.value + ':' + str) } 
end 
puts "New Tree" 
puts ROOT 
puts 

此代碼,例如,給出了:

Original Tree 
root - farleft 
    - left 
    - center 
    - right 
    - farright 

New Tree 
root - farleft - farleft:one 
       - farleft:two 
       - farleft:three 
       - farleft:four 
    - left - left:one 
      - left:two 
      - left:three 
      - left:four 
    - center - center:one 
       - center:two 
       - center:three 
       - center:four 
    - right - right:one 
      - right:two 
      - right:three 
      - right:four 
    - farright - farright:one 
       - farright:two 
       - farright:three 
       - farright:four 
5

A散列其屬性都是陣列?