Visualize a tree: Difference between revisions

+ D
(J: i do not have enough time to do this justice right now, so leave a pointer for later)
(+ D)
Line 70:
`--1
</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}}==
Tree borrowed from [[Tree traversal]]: