首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将树压平

如何将树压平
EN

Stack Overflow用户
提问于 2019-03-06 17:20:06
回答 2查看 980关注 0票数 2

我有一个包含以下内容的嵌套列表

代码语言:javascript
复制
public class Person
{
    public Person(string name)
    {
        this.Name = name;
    }

    public string Name { get; set; }

    public List<Person> Childs { get; set; }
}

该列表的用法如下:

代码语言:javascript
复制
var Persons = new List<Person>();
Persons.Add(new Person("Eric"));
Persons[0].Childs = new List<Person>();
Persons[0].Childs.Add(new Person("Tom"));
Persons[0].Childs.Add(new Person("John"));
Persons[0].Childs[0].Childs = new List<Person>();
Persons[0].Childs[0].Childs.Add(new Person("Bill"));
Persons.Add(new Person("John");

如何展平此树(将所有节点和子节点,以及子子节点放在列表中),例如,我希望使用level参数显示同一级别上的所有子节点和父节点。这意味着:

之前:

代码语言:javascript
复制
-Eric
    -Tom
    -John
        -Bill

我想要的:

代码语言:javascript
复制
-Eric, Level1
-Tom, Level2
-John, Level2
-Bill, Level3
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-03-06 17:28:08

递归方法的完美用例

代码语言:javascript
复制
public static void DisplayPerson(List<Person> persons, int level = 0)
{
    if (persons != null)
    {
        level++;
        foreach (Person item in persons)
        {
            Console.WriteLine("-" + item.Name + ", Level" + level); 
            DisplayPerson(item.Childs, level);
        }
    }
}

https://dotnetfiddle.net/2J9F5K

票数 7
EN

Stack Overflow用户

发布于 2020-01-27 17:06:58

在不改变原始模型的情况下展平一棵树的非常简短的代码:

代码语言:javascript
复制
  static void Main(string[] args)
{
    var flattedTree=new List<Person>();
    var Persons = new List<Person>();
    Persons.Add(new Person("Eric"));
    Persons[0].Childs = new List<Person>();
    Persons[0].Childs.Add(new Person("Tom"));
    Persons[0].Childs.Add(new Person("John"));
    Persons[0].Childs[0].Childs = new List<Person>();
    Persons[0].Childs[0].Childs.Add(new Person("Bill"));
    Persons.Add(new Person("John"));
    Flatten(Persons, flattedTree);
    //flattedTree variable is the flatted model of tree.
}
 static void Flatten(List<Person> nodes, List<Person> flattedNodes)
        {
            foreach (var node in nodes)
            {
                flattedNodes.Add(node);
                if (node.Childs?.Count > 0)
                    Flatten(node.Childs, flattedNodes);
            }
        }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55019486

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档