これは疑似コード/ C# バージョンです。コメントで C# 関連の質問をしてください。ここで重要なことは、先入れ先出しのデータ構造 (parents
以下のスニペットのキュー) を使用することです。このメソッドconvertToN_aryTree
は、結果の n 分ツリーのルート ノードを返します。
public class Node
{
public int data;
public int nCount; // 'n' in n-ary
public Node[] children; // this needs to be initialised to length n
public Node(int d, int n)
{
data = d;
nCount = n;
children = new Node[n];
}
}
// data is teh array and n is branch factor of the tree
Node convertToN_aryTree(int[] data, int n)
{
if(data.Length == 0)
{
return null;
}
Node root = new Node(data[0], n);
Node currParent = root;
Node curr;
int currChildCount = 0;
Queue<Node> parents = new Queue();
for(int i = 1; i<data.Length; i++)
{
curr = new Node(data[i], n);
currParent.children[currChildCount] = curr;
parents.Enqueue(curr);
currChildCount++;
if(currChildCount >= n) // finished with children of this node, so start adding to children of the next.
{ // next node is either a sibling or a child but that is taken care of by Queue.
currParent = parents.Dequeue();
currChildCount = 0;
}
}
return root;
}