private Node[] nextColumnNodes()
    {
        int nodesInColumn;
        if (currentColumn > square)
        {
            nodesInColumn = square - (currentColumn - square);
        }
        else
        {
            nodesInColumn = currentColumn;
        }

        Node[] nodes = new Node[nodesInColumn];
        Node tempNode;
        int nodeId;
        for (int i = 0; i < nodes.length; i += 1)
        {
            nodeId = lastNodeId += 1;
            tempNode = new Node(nodeId);
            nodes[i] = tempNode;
            if (decreasing)
            {
                if (i > 0)
                {
                    tempNode.TopChildId = nodeId + nodesInColumn - 1;
                }
                if (i < nodesInColumn - 1)
                {
                    tempNode.BottomChildId = nodeId + nodesInColumn;
                }

                if (i != 0 && i != nodesInColumn - 1)
                {
                    tempNode.MiddleChildId = nodeId + middleChildOffset;
                }

            }
            else
            {
                tempNode.TopChildId = nodeId + nodesInColumn;
                tempNode.BottomChildId = nodeId + nodesInColumn + 1;

                if (currentColumn + 1 >= square)
                {
                    tempNode.MiddleChildId = nodeId + middleChildOffset - 1;
                }
                else
                {
                    tempNode.MiddleChildId = nodeId + middleChildOffset;
                }

            }
        }

        currentColumn += 1;
        decreasing = currentColumn >= square;
        middleChildOffset = decreasing ? middleChildOffset - 2 : middleChildOffset + 2;
        return nodes;
    }