Skip to content

Instantly share code, notes, and snippets.

@palladin
Created July 27, 2017 10:25
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save palladin/6e2e3e10c819d69660b3ffeb08ee32ef to your computer and use it in GitHub Desktop.
Save palladin/6e2e3e10c819d69660b3ffeb08ee32ef to your computer and use it in GitHub Desktop.
Node to TreeNode traversal
class Program
{
class Node
{
public int Id;
public Node Parent;
}
class TreeNode
{
public int Id;
public List<TreeNode> Nodes;
public override string ToString()
{
return $"(Node {Id} ({string.Join(",", Nodes.Select(node => node.ToString()))}))";
}
}
static void Main(string[] args)
{
var node1 = new Node { Id = 1, Parent = null };
var node2 = new Node { Id = 2, Parent = node1 };
var node3 = new Node { Id = 3, Parent = node2 };
var node4 = new Node { Id = 4, Parent = node2 };
var node5 = new Node { Id = 5, Parent = node2 };
var node6 = new Node { Id = 6, Parent = node1 };
var nodes = new[] { node1, node2, node3, node4, node5, node6 };
var dict = new Dictionary<int, TreeNode>();
TreeNode root = null;
foreach (var node in nodes)
{
var treeNode = default(TreeNode);
if (node.Parent == null)
{
if (dict.ContainsKey(node.Id))
{
treeNode = dict[node.Id];
}
else
{
treeNode = new TreeNode { Id = node.Id, Nodes = new List<TreeNode>() };
dict.Add(node.Id, treeNode);
}
root = treeNode;
continue;
}
if (dict.ContainsKey(node.Id))
{
treeNode = dict[node.Id];
}
else
{
treeNode = new TreeNode { Id = node.Id, Nodes = new List<TreeNode>() };
dict.Add(node.Id, treeNode);
}
if (dict.ContainsKey(node.Parent.Id))
{
var treeParentNode = dict[node.Parent.Id];
treeParentNode.Nodes.Add(treeNode);
}
else
{
var treeParent = new TreeNode { Id = node.Parent.Id, Nodes = new List<TreeNode> { treeNode } };
dict.Add(node.Id, treeParent);
}
}
Console.WriteLine(root.ToString());
return;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment