在添加到列表时以递归方式遍历树

时间:2014-07-28 09:24:55

标签: c# recursion tree traversal

如何以递归方向向上遍历我的树,并且当添加到List<User>时,当它到达根时终止的ID?我尝试过与ref和out的差异组合,没有运气。

我尝试修改dotnetpearls example

static int Recursive(int value, ref int count)
{
    count++;
    if (value >= 10)
    {
        // throw new Exception("End");
        return value;
    }
    return Recursive(value + 1, ref count);
}

static void Main()
{
    //
    // Call recursive method with two parameters.
    //
    int count = 0;
    int total = Recursive(5, ref count);
    //
    // Write the result from the method calls and also the call count.
    //
    Console.WriteLine(total);
    Console.WriteLine(count);
}

对于这样的事情:

static void Main(string[] args)
{
    List<int> userIds = new List<int>();
    Recursive(5, ref userIds);

    Console.WriteLine(userIds);
    Console.ReadKey();
}

static int Recursive(int nodeId, ref List<int> userIds)
{
    userIds.AddRange(GetPersonIdsOnThisNode(nodeId)); // Error: Argument type 'int' is not assignable to parameter type 'System.Collections.Generic.IEnumerable<int>'
    if (nodeId >= 10)
    {
        return nodeId; // I don't care about the return value. I only care about populating my list of userId's.
    }
    return Recursive(nodeId + 1, ref userIds);
}

static int GetUserIdsOnThisNode(int nodeId)
{
    return 3;
}

1 个答案:

答案 0 :(得分:2)

AddRange是一次添加多个对象,并且您要添加一个int元素。 它期待list,您提供的是int

改为使用userIds.Add