Sha256: b2afd809a8b69adfd900d099c100126e8f5f38e4bddb85ac6daaa00293bee36e
Contents?: true
Size: 1.73 KB
Versions: 1
Compression:
Stored size: 1.73 KB
Contents
module Rambling module Trie # A representation of a node in the Trie data structure. class Node include ChildrenHashDeferer include Compressor include Branches # Letter or letters corresponding to this node. # @return [Symbol, nil] the corresponding letter(s) or nil. attr_reader :letter # Children nodes. # @return [Hash] the children hash, consisting of :letter => node. attr_reader :children # Parent node. # @return [TrieNode, nil] the parent node or nil for the root element. attr_accessor :parent # Creates a new TrieNode. # @param [String] word the word from which to create this TrieNode and his branch. # @param [TrieNode] parent the parent of this node. def initialize(word, parent = nil) @letter = nil @parent = parent @is_terminal = false @children = {} unless word.nil? or word.empty? letter = word.slice!(0) @letter = letter.to_sym unless letter.nil? @is_terminal = word.empty? add_branch_from(word) end end # Flag for terminal nodes. # @return [Boolean] `true` for terminal nodes, `false` otherwise. def terminal? @is_terminal end # String representation of the current node, if it is a terminal node. # @return [String] the string representation of the current node. # @raise [InvalidTrieOperation] if node is not terminal or is root. def as_word raise InvalidOperation.new() unless @letter.nil? or terminal? get_letter_string end protected def get_letter_string (@parent.nil? ? '' : @parent.get_letter_string) + @letter.to_s end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
rambling-trie-0.4.0 | lib/rambling-trie/node.rb |