Visualize a tree: Difference between revisions
Content added Content deleted
(J: i do not have enough time to do this justice right now, so leave a pointer for later) |
(+ D) |
||
Line 70: | Line 70: | ||
`--1 |
`--1 |
||
</pre> |
</pre> |
||
=={{header|D}}== |
|||
{{trans|Haskell}} |
|||
<lang d>import std.stdio, std.conv, std.algorithm, std.array; |
|||
struct BTNode(T) { |
|||
T value; |
|||
typeof(this)* left, right; |
|||
} |
|||
string[] treeIndent(T)(in BTNode!T* t) { |
|||
if (t is null) return ["-- (null)"]; |
|||
const tr = treeIndent(t.right); |
|||
return text("--", t.value) ~ |
|||
map!q{" |" ~ a}(treeIndent(t.left)).array() ~ |
|||
(" `" ~ tr[0]) ~ map!q{" " ~ a}(tr[1..$]).array(); |
|||
} |
|||
void main () { |
|||
static N(T)(T value_, BTNode!T* left_=null, BTNode!T* right_=null) { |
|||
//return new BTNode!T(value_, left_, right_); // not supported |
|||
auto t = new BTNode!T; |
|||
*t = BTNode!T(value_, left_, right_); |
|||
return t; |
|||
} |
|||
const tree = N(1, N(2, N(4, N(7)), N(5)), N(3, N(6, N(8), N(9)))); |
|||
writefln("%-(%s\n%)", tree.treeIndent()); |
|||
}</lang> |
|||
{{out}} |
|||
<pre>--1 |
|||
|--2 |
|||
| |--4 |
|||
| | |--7 |
|||
| | | |-- (null) |
|||
| | | `-- (null) |
|||
| | `-- (null) |
|||
| `--5 |
|||
| |-- (null) |
|||
| `-- (null) |
|||
`--3 |
|||
|--6 |
|||
| |--8 |
|||
| | |-- (null) |
|||
| | `-- (null) |
|||
| `--9 |
|||
| |-- (null) |
|||
| `-- (null) |
|||
`-- (null)</pre> |
|||
=={{header|Haskell}}== |
=={{header|Haskell}}== |
||
Tree borrowed from [[Tree traversal]]: |
Tree borrowed from [[Tree traversal]]: |