输出树结构的递归方法

时间:2016-05-01 17:15:36

标签: c# recursion tree

我有一个C#程序,利用控制台在动物园中执行操作。目前我被要求使用私人静态方法向动物园里的动物儿童展示。然后他们孩子的孩子等......我有另一种方法,当在控制台中输入时首先找到特定的动物,然后用传入的动物调用另一个静态的WalkTree方法。 WalkTree方法是执行递归方法并输出树,如发现控制台的子图。每个级别都需要像这样展开,以显示"家谱"。

> show children Bella
Bella: Dingo (10, 40.2)
    Coco: Dingo (7, 38.3)
        Brutus: Dingo (3, 36)
    Maggie: Dingo (7, 34.8)
        Toby: Dingo (4, 42.5)
        Steve: Dingo (4, 41.1)
    Lucy: Dingo (7, 36.5)
    Ted: Dingo (7, 39.7)

树的每个级别都应该为前缀添加两个空格,如上例所示。

/// Shows a list of children of the animals in the zoo.
private static void ShowChildren(Zoo zoo, string name)
{
    // Find the animal with the passed-in name.
    Animal animal = zoo.FindAnimal(name);

    // Then call the WalkTree method and pass in the animal and an empty string.
    WalkTree(animal, string.Empty);
}

/// Walks down a tree of parents and children in the zoo.
private static void WalkTree(Animal animal, string prefix)
{
    prefix = "  ";
    Console.WriteLine(animal);
    foreach (Animal a in animal.Children)
    {
        WalkTree(a, prefix);

    }
}

到目前为止,这就是我所处的位置。我只能使用递归来输出列表中的父,子和子项。

> show children Bella
Bella: Dingo (10, 40.2)
Coco: Dingo (7, 38.3)
Brutus: Dingo (3, 36)
Maggie: Dingo (7, 34.8)
Toby: Dingo (4, 42.5)
Steve: Dingo (4, 41.1)
Lucy: Dingo (7, 36.5)
Ted: Dingo (7, 39.7)

提前致谢,如果你们有任何问题,请告诉我们!

1 个答案:

答案 0 :(得分:2)

我认为你几乎就在那里。需要进行两项更改:

  1. 您在编写控制台时没有使用前缀。您需要为每只动物的输出字符串添加前缀。
  2. 您对WalkTree的每次递归调用使用相同的前缀。根据您自己的描述,您希望为每个级别添加两个空格,因此您需要将其附加到当前前缀。
  3. 所以,做出这两个改变:

    private static void WalkTree(Animal animal, string prefix)
    {
        Console.WriteLine(prefix + animal.ToString());
        foreach (Animal a in animal.Children)
        {
            WalkTree(a, prefix + "  ");
        }
    }