Class: Rambling::Trie::Nodes::Node
- Inherits:
-
Object
- Object
- Rambling::Trie::Nodes::Node
- Includes:
- Comparable, Compressible, Enumerable, Inspectable, Stringifyable
- Defined in:
- lib/rambling/trie/nodes/node.rb
Overview
A representation of a node in the trie data structure.
Direct Known Subclasses
Instance Attribute Summary collapse
-
#children_tree ⇒ Hash
Child nodes tree.
-
#letter ⇒ Symbol?
The corresponding letter(s).
-
#parent ⇒ Node?
Parent node.
Instance Method Summary collapse
-
#[](letter) ⇒ Node
Get Node corresponding to a given letter.
-
#[]=(letter, node) ⇒ Node
Set the Node that corresponds to a given letter.
-
#children ⇒ Array<Node>
Child nodes.
- #delete(letter) ⇒ Node
-
#first_child ⇒ Node?
First child node.
-
#initialize(letter = nil, parent = nil, children_tree = {}) ⇒ Node
constructor
Creates a new node.
-
#key?(letter) ⇒ Boolean
(also: #has_key?)
Check if a Node‘s children tree contains a given letter.
-
#match_prefix(chars) {|String| ... } ⇒ Enumerator<String>
Returns all words that match a prefix of any length within chars.
-
#partial_word?(chars) ⇒ Boolean
Checks if a path for a set of characters exists in the trie.
-
#root? ⇒ Boolean
Indicates if the current node is the root node.
-
#scan(chars) ⇒ Node
Returns the node that starts with the specified characters.
-
#terminal! ⇒ Node
Mark Node as terminal.
-
#terminal? ⇒ Boolean
Indicates if a Node is terminal or not.
-
#word?(chars = []) ⇒ Boolean
Checks if a path for set of characters represents a word in the trie.
Methods included from Inspectable
Methods included from Stringifyable
Methods included from Comparable
Methods included from Enumerable
Methods included from Compressible
Constructor Details
#initialize(letter = nil, parent = nil, children_tree = {}) ⇒ Node
Creates a new node.
36 37 38 39 40 |
# File 'lib/rambling/trie/nodes/node.rb', line 36 def initialize letter = nil, parent = nil, children_tree = {} @letter = letter @parent = parent @children_tree = children_tree end |
Instance Attribute Details
#children_tree ⇒ Hash
Child nodes tree.
27 28 29 |
# File 'lib/rambling/trie/nodes/node.rb', line 27 def children_tree @children_tree end |
#letter ⇒ Symbol? #letter=(letter) ⇒ Symbol?
Returns the corresponding letter(s).
22 23 24 |
# File 'lib/rambling/trie/nodes/node.rb', line 22 def letter @letter end |
#parent ⇒ Node?
Parent node.
31 32 33 |
# File 'lib/rambling/trie/nodes/node.rb', line 31 def parent @parent end |
Instance Method Details
#[](letter) ⇒ Node
Get Node corresponding to a given letter.
133 134 135 |
# File 'lib/rambling/trie/nodes/node.rb', line 133 def [] letter children_tree[letter] end |
#[]=(letter, node) ⇒ Node
Set the Node that corresponds to a given letter.
144 145 146 |
# File 'lib/rambling/trie/nodes/node.rb', line 144 def []= letter, node children_tree[letter] = node end |
#children ⇒ Array<Node>
Child nodes.
45 46 47 |
# File 'lib/rambling/trie/nodes/node.rb', line 45 def children children_tree.values end |
#delete(letter) ⇒ Node
Delete a given letter and its corresponding Node from
this {Node Node}'s children tree.
165 166 167 |
# File 'lib/rambling/trie/nodes/node.rb', line 165 def delete letter children_tree.delete letter end |
#first_child ⇒ Node?
First child node.
51 52 53 54 55 56 57 |
# File 'lib/rambling/trie/nodes/node.rb', line 51 def first_child return if children_tree.empty? children_tree.each_value do |child| return child end end |
#key?(letter) ⇒ Boolean Also known as: has_key?
Check if a Node‘s children tree contains a given
letter.
154 155 156 |
# File 'lib/rambling/trie/nodes/node.rb', line 154 def key? letter children_tree.key? letter end |
#match_prefix(chars) {|String| ... } ⇒ Enumerator<String>
Returns all words that match a prefix of any length within chars.
118 119 120 121 122 123 124 125 126 |
# File 'lib/rambling/trie/nodes/node.rb', line 118 def match_prefix chars return enum_for :match_prefix, chars unless block_given? yield as_word if terminal? children_match_prefix chars do |word| yield word end end |
#partial_word?(chars) ⇒ Boolean
Checks if a path for a set of characters exists in the trie.
87 88 89 90 91 |
# File 'lib/rambling/trie/nodes/node.rb', line 87 def partial_word? chars return true if chars.empty? partial_word_chars? chars end |
#root? ⇒ Boolean
Indicates if the current node is the root node.
62 63 64 |
# File 'lib/rambling/trie/nodes/node.rb', line 62 def root? !parent end |
#scan(chars) ⇒ Node
Returns the node that starts with the specified characters.
107 108 109 110 111 |
# File 'lib/rambling/trie/nodes/node.rb', line 107 def scan chars return self if chars.empty? closest_node chars end |
#terminal! ⇒ Node
Mark Node as terminal.
74 75 76 77 |
# File 'lib/rambling/trie/nodes/node.rb', line 74 def terminal! self.terminal = true self end |
#terminal? ⇒ Boolean
Indicates if a Node is terminal or not.
68 69 70 |
# File 'lib/rambling/trie/nodes/node.rb', line 68 def terminal? !!terminal end |
#word?(chars = []) ⇒ Boolean
Checks if a path for set of characters represents a word in the trie.
97 98 99 100 101 |
# File 'lib/rambling/trie/nodes/node.rb', line 97 def word? chars = [] return terminal? if chars.empty? word_chars? chars end |