Tree datastructures: Difference between revisions

Content added Content deleted
m (Withdrew the examples which use other sample outlines. I don't feel comfortable reproducing jokes about mocking and trolling.)
(→‎{{header|Go}}: Changed 'golfing' to 'trolling'. Also round trip test now programmatic rather than just visual.)
Line 45: Line 45:
import (
import (
"fmt"
"fmt"
"io"
"os"
"strings"
"strings"
)
)
Line 58: Line 60:
}
}


func printNest(n nNode, level int) {
func printNest(n nNode, level int, w io.Writer) {
if level == 0 {
if level == 0 {
fmt.Println("\n==Nest form==\n")
fmt.Fprintln(w, "\n==Nest form==\n")
}
}
fmt.Printf("%s%s\n", strings.Repeat(" ", level), n.name)
fmt.Fprintf(w, "%s%s\n", strings.Repeat(" ", level), n.name)
for _, c := range n.children {
for _, c := range n.children {
fmt.Printf("%s", strings.Repeat(" ", level+1))
fmt.Fprintf(w, "%s", strings.Repeat(" ", level+1))
printNest(c, level+1)
printNest(c, level+1, w)
}
}
}
}
Line 84: Line 86:
}
}


func printIndent(iNodes []iNode) {
func printIndent(iNodes []iNode, w io.Writer) {
fmt.Println("\n==Indent form==\n")
fmt.Fprintln(w, "\n==Indent form==\n")
for _, n := range iNodes {
for _, n := range iNodes {
fmt.Printf("%d %s\n", n.level, n.name)
fmt.Fprintf(w, "%d %s\n", n.level, n.name)
}
}
}
}
Line 101: Line 103:
n1 := nNode{"RosettaCode", nil}
n1 := nNode{"RosettaCode", nil}
n2 := nNode{"rocks", []nNode{{"code", nil}, {"comparison", nil}, {"wiki", nil}}}
n2 := nNode{"rocks", []nNode{{"code", nil}, {"comparison", nil}, {"wiki", nil}}}
n3 := nNode{"mocks", []nNode{{"golfing", nil}}}
n3 := nNode{"mocks", []nNode{{"trolling", nil}}}
n1.children = append(n1.children, n2, n3)
n1.children = append(n1.children, n2, n3)

printNest(n1, 0)
var sb strings.Builder
printNest(n1, 0, &sb)
s1 := sb.String()
fmt.Print(s1)

var iNodes []iNode
var iNodes []iNode
toIndent(n1, 0, &iNodes)
toIndent(n1, 0, &iNodes)
printIndent(iNodes)
printIndent(iNodes, os.Stdout)

var n nNode
var n nNode
toNest(iNodes, 0, 0, &n)
toNest(iNodes, 0, 0, &n)
printNest(n, 0)
sb.Reset()
printNest(n, 0, &sb)
s2 := sb.String()
fmt.Print(s2)

fmt.Println("\nRound trip test satisfied? ", s1 == s2)
}</lang>
}</lang>


Line 122: Line 135:
wiki
wiki
mocks
mocks
golfing
trolling


==Indent form==
==Indent form==
Line 132: Line 145:
2 wiki
2 wiki
1 mocks
1 mocks
2 trolling
2 golfing


==Nest form==
==Nest form==
Line 142: Line 155:
wiki
wiki
mocks
mocks
golfing
trolling
</pre>


Round trip test satisfied? true
</pre>


=={{header|Python}}==
=={{header|Python}}==