RosettaCodeData/Task/Tree-datastructures/11l/tree-datastructures.11l

80 lines
1.9 KiB
Text
Raw Permalink Normal View History

2023-07-01 11:58:00 -04:00
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))