using
System;
using
System.Collections.Generic;
public
class
Node {
public
int
Value;
public
List<Node> Children;
public
Node(
int
value)
{
Value = value;
Children =
new
List<Node>();
}
}
public
class
GFG {
static
Node FindRoot(List<Node> tree)
{
Dictionary<Node, Node> parents
=
new
Dictionary<Node, Node>();
foreach
(Node node
in
tree)
{
foreach
(Node child
in
node.Children)
{
parents[child] = node;
}
}
foreach
(Node node
in
tree)
{
if
(!parents.ContainsKey(node)) {
return
node;
}
}
return
null
;
}
public
static
void
Main(
string
[] args)
{
Node node1 =
new
Node(5);
Node node2 =
new
Node(3);
Node node3 =
new
Node(6);
Node node4 =
new
Node(7);
Node node5 =
new
Node(9);
Node node6 =
new
Node(2);
Node node7 =
new
Node(1);
Node node8 =
new
Node(8);
node1.Children.AddRange(
new
[] { node2, node3, node4 });
node2.Children.AddRange(
new
[] { node5, node6 });
node4.Children.AddRange(
new
[] { node7, node8 });
List<Node> tree
=
new
List<Node>{ node1, node2, node3, node4,
node5, node6, node7, node8 };
Node root = FindRoot(tree);
if
(root !=
null
) {
Console.WriteLine($
"Root value: { root.Value }"
);
}
else
{
Console.WriteLine(
"No root found."
);
}
foreach
(Node node
in
tree)
{
}
}
}