NAry Tree implementation In C# Here I implement N-Ary tree in C#.

namespace ConsoleApplication1
{

    public class tree {
        public int info;
        public tree child;
        public tree siblings;

        public tree(int data)
        {
            info = data;
        }
    }

    public class NAryTree
    {
        public tree ROOT;
        public tree search(tree root, int data)
        {
            if (root == null)
                return null;

            if (data == root.info)
                return root;

            tree t = search(root.child, data);
            if (t == null)
                t = search(root.siblings, data);

            return t;
        }

        public void CreateNarray( int[] data)
        {  tree temp  = null;
            if(ROOT != null)
             temp = search(ROOT,data[0]);

            if (temp == null)
            {
                temp = new tree(data[0]);

            }
            if (this.ROOT == null)
                ROOT = temp;
            tree parent = temp;

            for (int j = 0; j &lt; data[1]; j++)
            {
                // for first child
                if (j == 0)
                {
                    parent.child = new tree(data[j+2]);
                    parent = parent.child;
                }
                //for all other childs
                else
                {
                    parent.siblings = new tree(data[j+2]);
                    parent = parent.siblings;
                }

            }

        }

        public void Print()
        {
            preorder(ROOT);
        }
       public void preorder( tree p)
         {
        if(p==null)
        return;
         Console.WriteLine(""+p.info);
         preorder(p.child);

        preorder(p.siblings);
           }
    }




    class Program
    {
        static void Main(string[] args)
        {

            NAryTree naryTree = new NAryTree();
            //1st element in each row is node Value, 2nd - no of child, ,&gt;=3rd....=&gt;value of child

              int[][] data={new int[] {1,3,2,3,4}, new int[] {2,3,1,6,50},new int[]{3,3,8,9,10},new int[]{4,3,0,0,0,0}};


              for (int i = 0; i &lt; data.GetLength(0); i++ )
              {
                 naryTree.CreateNarray(  data[i]);
              }

              naryTree.Print();
            Console.ReadLine();
        }
    }
}


Sorry for My Sub Standard English.
There are some points I would like to address to you, but I am missing a little bit the purpose of your exercise. From what I understand, every node of your tree can have only one child and only one sibling. Is it a feature or maybe you should change the Tree class to have as type for both Child and Siblings as IEnumerable&lt;Tree&gt;?

One thing that usually makes reviewer happy, is to give a consistant and understandable naming through the whole application. For example, I think it would improve readability renaming the class Tree to Node, and the field Info to Value. 

I would avoid, if possible, the usage of fields and I would stick with public properties. A good explanation about why can be found here. For now then, your Tree class should look like this:

public class Node
{
    public int Value { get; set; }
    public Node Children { get; set; }
    public Node Siblings { get; set; }

    public Node(int data)
    {
        Value = data;
    }
}


If you are trying to implement a N-ary tree, I guess you would like that (as by definition), you won't have more than N children for each node. As you implemented it, as I was stating in my first request, you're only implementing a 1-ary tree. 
For a N-ary tree, an idea could be adding N as property of the NAryTree, and change the types accordingly to avoid having more than N children for each node.

For the NAryTree, if I only read to signatures of methods, I would get the wrong idea about what you're trying to do. Print() gives me the idea you're trying to display on screen the content of the tree, but PreOrder() leads me to think you're sorting an unsorted tree (so, this is a bad name), and CreateNArray(int[] data) makes me think you're creating a new N-Array from scratch (again, which is your purpose here? I can't understand if a better name would be Initialize(int[] data) or Add(int[] data)).
Another suggestion I would like to give you, is to extract an interface for your NAryTree: this would  Accordingly to what I was saying before, I would rename Print() to ToString() and return a string as type.
Maybe adding the AddChild(int value) to the Node class would help you to keep easier the implementation of the CreateNArray method, if I got what you're trying to do.