RosettaCodeData/Task/Same-Fringe/D/same-fringe-1.d
Ingy döt Net b83f433714 tasks a-s
2013-04-10 23:57:08 -07:00

22 lines
583 B
D

struct Node(T) {
T data;
Node* L, R;
}
bool sameFringe(T)(Node!T* t1, Node!T* t2) {
T[] scan(Node!T* t) {
if (!t) return [];
return (!t.L && !t.R) ? [t.data] : scan(t.L) ~ scan(t.R);
}
return scan(t1) == scan(t2);
}
void main() {
import std.stdio;
alias N = Node!int;
auto t1 = new N(10, new N(20, new N(30, new N(40), new N(50))));
auto t2 = new N(1, new N(2, new N(3, new N(40), new N(50))));
writeln(sameFringe(t1, t2));
auto t3 = new N(1, new N(2, new N(3, new N(40), new N(51))));
writeln(sameFringe(t1, t3));
}