class TrieNode
Attributes
child_nodes[RW]
god_node[RW]
parent_node[RW]
value[RW]
Public Class Methods
create(word, parent_node=nil, god_node=nil)
click to toggle source
has_many # belongs_to # belongs_to
# File lib/trie_node.rb, line 5 def self.create(word, parent_node=nil, god_node=nil) if word.to_s.length < 1 return nil else self.new(word, parent_node, god_node) end end
new(word, parent_node=nil, god_node=nil)
click to toggle source
# File lib/trie_node.rb, line 13 def initialize(word, parent_node=nil, god_node=nil) self.god_node = god_node self.child_nodes = [] self.value = word[0] self.insert_word(word) if word.length > 1 self.parent_node = parent_node unless parent_node.nil? end
Public Instance Methods
insert_letter(letter)
click to toggle source
# File lib/trie_node.rb, line 47 def insert_letter(letter) if !(next_letter_node=self.child_nodes.find{|child_node| child_node.value == letter }).nil? return next_letter_node else new_node = TrieNode.create(letter, self, self.god_node) self.child_nodes << new_node if !new_node.nil? return new_node end end
insert_word(word)
click to toggle source
# File lib/trie_node.rb, line 33 def insert_word(word) return self if word.empty? letters = word.split('').map(&:strip) if self.value == letters.shift next_letter = letters[0] next_node = self.insert_letter(next_letter) return if next_node.nil? next_node.insert_word(letters.join('')) else puts "THIS WORD DOES NOT BELONG TO THIS TRIE" return end end
to_a(base_word="")
click to toggle source
# File lib/trie_node.rb, line 21 def to_a(base_word="") new_base = "#{base_word}#{self.value}" return if base_word == new_base generated_words = self.child_nodes.map{|cd| cd.to_a(new_base) } self.god_node.generated_words << generated_words if !generated_words.empty? return new_base end
to_h()
click to toggle source
# File lib/trie_node.rb, line 29 def to_h {@value => @child_nodes.map(&:to_h).inject({}){|mem, hash| mem.merge!(hash) } } end