# DGM Interview with Dren
### Fix the bugs in this function to count reachable nodes in a directed graph.
```typescript
type Node<T> = {
value: T,
children: Node<T>[]
}
/*
* {
value: 0,
children: [
{
value: 1,
children; []
},
{
value: 2,
children; []
}
]
* }
*/
[...seen, root] = [seen[0], seen[1], ... seen[seen.length-1], root]
// arr =[0, 1, 2...]
// arr1 = arr.map(e => e + 1)
const countNodes<T> = (seen: Node<T>[]) => (root: Node<T>): number =>
root.children
.map(countNodes([...seen, root]))
.reduce((sum, x) => sum + x, 0);
```
```php
class Node {
public $value;
public $children;
// count how many nodes are reachable from this node including this node
/*
* {
value: 0,
children: [
{
value: 1,
children: []
},
{
value: 2,
children: []
}
]
* }
*/
/*
* {
value: 0,
children: [
{
value: 1,
children: [] // -> 0
}
]
* }
*/
public countNodes($seen=[], $tree) {
$n = 0;
$seen[] = $tree;
foreach($tree->children as $child) {
$n += countNodes($seen, $child); // 0 ->
}
return $n;
}
}
```
```typescript
const singleton_loop: Node<null> = {value: null, children: [singleton_loop]};
countNodes(singleton_loop) === 1;
```