public Node[] Children {get; set;}
public Node Right {get;set;}
public static void Main()
var rootNode = new Node();
PopulateRightNode(rootNode, null);
Console.WriteLine(rootNode.Children[0].Right != null);
Console.WriteLine(rootNode.Children[0].Right.Right != null);
Console.WriteLine(rootNode.Children[0].Right.Right.Right == null);
private static void PopulateTree(Node node)
node.Children = new Node[] {
private static void PopulateRightNode(Node node, Node parent)
foreach(var child in parent.Children)
if (child == node && index < parent.Children.Length - 1)
node.Right = parent.Children[index + 1];
PopulateRightNode(node.Right, parent);
if (child == node && index == parent.Children.Length - 1)
var startNode = parent.Right;
if (startNode.Children == null && startNode.Right != null)
startNode = startNode.Right;
node.Right = startNode.Children[0];
PopulateRightNode(node.Right, startNode);
PopulateRightNode(node.Children[0], node);