| Class | Tree::TreeNode |
| In: |
lib/tree.rb
|
| Parent: | Object |
The node class for the tree representation. the nodes are named and have a place-holder for the node data (i.e., the `content’ of the node). The node names are expected to be unique. In addition, the node provides navigation methods to traverse the tree.
The nodes can have any number of child nodes attached to it. Note that while this implementation does not support directed graphs, the class itself makes no restrictions on associating a node‘s CONTENT with multiple parent nodes.
The following code-snippet implements this tree structure:
+------------+
| ROOT |
+-----+------+
+-------------+------------+
| |
+-------+-------+ +-------+-------+
| CHILD 1 | | CHILD 2 |
+-------+-------+ +---------------+
|
|
+-------+-------+
| GRANDCHILD 1 |
+---------------+
require ‘tree‘
myTreeRoot = Tree::TreeNode.new("ROOT", "Root Content")
myTreeRoot << Tree::TreeNode.new("CHILD1", "Child1 Content") << Tree::TreeNode.new("GRANDCHILD1", "GrandChild1 Content")
myTreeRoot << Tree::TreeNode.new("CHILD2", "Child2 Content")
myTreeRoot.printTree
child1 = myTreeRoot["CHILD1"]
grandChild1 = myTreeRoot["CHILD1"]["GRANDCHILD1"]
siblingsOfChild1Array = child1.siblings
immediateChildrenArray = myTreeRoot.children
# Process all nodes
myTreeRoot.each { |node| node.content.reverse }
myTreeRoot.remove!(child1) # Remove the child
| content | [R] | |
| content | [W] | |
| name | [R] | |
| parent | [R] |
Constructor which expects the name of the node
Name of the node is expected to be unique across the tree.
The content can be of any type, and is defaulted to nil.
Convenience synonym for TreeNode#add method. This method allows a convenient method to add children hierarchies in the tree.
E.g. root << child << grand_child
Provides a comparision operation for the nodes. Comparision is based on the natural character-set ordering for the node names.
Adds the specified child node to the receiver node. The child node‘s parent is set to be the receiver. The child is added as the last child in the current list of children for the receiver node.
Performs breadth first traversal of the tree rooted at this node. The traversal in a given level is from left to right.
Returns every node (including the receiver node) from the tree to the specified block. The traversal is depth first and from left to right in pre-ordered sequence.
Yields all leaf nodes from this node to the specified block. May yield this node as well if this is a leaf node. Leaf traversal depth first and left to right.
Loads a marshalled dump of the tree and returns the root node of the reconstructed tree. See the Marshal class for additional details.
Returns an array of ancestors in reversed order (the first element is the immediate parent). Returns nil if this is a root node.
Traverses the tree in a pre-ordered sequence. This is equivalent to TreeNode#each
Removes the specified child node from the receiver node. The removed children nodes are orphaned but available if an alternate reference exists.
Returns the child node.