80 lines
1.9 KiB
Text
80 lines
1.9 KiB
Text
|
|
T NNode
|
|||
|
|
String value
|
|||
|
|
[NNode] children
|
|||
|
|
|
|||
|
|
F (value)
|
|||
|
|
.value = value
|
|||
|
|
|
|||
|
|
F add(node)
|
|||
|
|
.children.append(node)
|
|||
|
|
|
|||
|
|
F.const to_str(depth) -> String
|
|||
|
|
V result = (‘ ’ * depth)‘’(.value)"\n"
|
|||
|
|
L(child) .children
|
|||
|
|
result ‘’= child.to_str(depth + 1)
|
|||
|
|
R result
|
|||
|
|
|
|||
|
|
F String()
|
|||
|
|
R .to_str(0)
|
|||
|
|
|
|||
|
|
T INode
|
|||
|
|
String value
|
|||
|
|
Int level
|
|||
|
|
F (value, level)
|
|||
|
|
.value = value
|
|||
|
|
.level = level
|
|||
|
|
|
|||
|
|
F to_indented(node)
|
|||
|
|
[INode] result
|
|||
|
|
F add_node(NNode node, Int level) -> N
|
|||
|
|
@result.append(INode(node.value, level))
|
|||
|
|
L(child) node.children
|
|||
|
|
@add_node(child, level + 1)
|
|||
|
|
add_node(node, 0)
|
|||
|
|
R result
|
|||
|
|
|
|||
|
|
F to_nested(tree)
|
|||
|
|
[NNode] stack
|
|||
|
|
V nnode = NNode(tree[0].value)
|
|||
|
|
L(i) 1 .< tree.len
|
|||
|
|
V inode = tree[i]
|
|||
|
|
I inode.level > stack.len
|
|||
|
|
stack.append(nnode)
|
|||
|
|
E I inode.level == stack.len
|
|||
|
|
stack.last.children.append(nnode)
|
|||
|
|
E
|
|||
|
|
L inode.level < stack.len
|
|||
|
|
stack.last.children.append(nnode)
|
|||
|
|
nnode = stack.pop()
|
|||
|
|
stack.last.children.append(nnode)
|
|||
|
|
nnode = NNode(inode.value)
|
|||
|
|
|
|||
|
|
L stack.len > 0
|
|||
|
|
stack.last.children.append(nnode)
|
|||
|
|
nnode = stack.pop()
|
|||
|
|
|
|||
|
|
R nnode
|
|||
|
|
|
|||
|
|
print(‘Displaying tree built using nested structure:’)
|
|||
|
|
V nestedTree = NNode(‘RosettaCode’)
|
|||
|
|
V rocks = NNode(‘rocks’)
|
|||
|
|
rocks.add(NNode(‘code’))
|
|||
|
|
rocks.add(NNode(‘comparison’))
|
|||
|
|
rocks.add(NNode(‘wiki’))
|
|||
|
|
V mocks = NNode(‘mocks’)
|
|||
|
|
mocks.add(NNode(‘trolling’))
|
|||
|
|
nestedTree.add(rocks)
|
|||
|
|
nestedTree.add(mocks)
|
|||
|
|
print(nestedTree)
|
|||
|
|
|
|||
|
|
print(‘Displaying tree converted to indented structure:’)
|
|||
|
|
V indentedTree = to_indented(nestedTree)
|
|||
|
|
L(node) indentedTree
|
|||
|
|
print((node.level)‘ ’(node.value))
|
|||
|
|
print()
|
|||
|
|
|
|||
|
|
print(‘Displaying tree converted back to nested structure:’)
|
|||
|
|
print(to_nested(indentedTree))
|
|||
|
|
|
|||
|
|
print(‘Are they equal? ’(I String(nestedTree) == String(to_nested(indentedTree)) {‘yes’} E ‘no’))
|