75 lines
1.8 KiB
Plaintext
75 lines
1.8 KiB
Plaintext
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 to_indented(node)
|
||
[INode] result
|
||
F add_node(NNode node, Int level) -> Void
|
||
@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’))
|