예제 #1
0
        public Count GetTotals(int level)
        {
            Count result = new Count();

            result.name   = name;
            result.level  = level;
            result.points = points;
            result.types  = new Dictionary <int, int>();
            result.types.Add(type, 1);
            if (children != null)
            {
                for (int childCount = children.Count - 1; childCount >= 0; childCount--)
                {
                    Node  child        = children[childCount];
                    Count childResutls = child.GetTotals(level + 1);
                    result.points += childResutls.points;
                    foreach (int key in childResutls.types.Keys)
                    {
                        if (result.types.ContainsKey(key))
                        {
                            result.types[key] += childResutls.types[key];
                        }
                        else
                        {
                            result.types.Add(key, childResutls.types[key]);
                        }
                    }
                }
            }
            Node.results.Insert(0, result);
            return(result);
        }
예제 #2
0
        static void Main(string[] args)
        {
            Node father = new Node()
            {
                name = "FATHER", points = 200, type = 2, children = new List <Node>()
                {
                    new Node()
                    {
                        name = "CHILD01", points = 120, type = 3, children = new List <Node>()
                        {
                            new Node()
                            {
                                name = "CHILD04", points = 300, type = 3, children = new List <Node>()
                                {
                                    new Node()
                                    {
                                        name = "CHILD08", points = 220, type = 3, children = null
                                    },
                                    new Node()
                                    {
                                        name = "CHILD09", points = 65, type = 1, children = null
                                    }
                                }
                            },
                            new Node()
                            {
                                name = "CHILD05", points = 15, type = 9, children = null
                            }
                        }
                    },
                    new Node()
                    {
                        name = "CHILD02", points = 10, type = 1, children = null
                    },
                    new Node()
                    {
                        name = "CHILD03", points = 80, type = 2, children = new List <Node>()
                        {
                            new Node()
                            {
                                name = "CHILD06", points = 25, type = 2, children = new List <Node>()
                                {
                                    new Node()
                                    {
                                        name = "CHILD10", points = 110, type = 7, children = null
                                    },
                                    new Node()
                                    {
                                        name = "CHILD11", points = 195, type = 3, children = null
                                    }
                                }
                            },
                            new Node()
                            {
                                name = "CHILD07", points = 50, type = 7, children = null
                            }
                        }
                    }
                }
            };
            Count results = father.GetTotals(0);

            foreach (Count result in Node.results)
            {
                Console.WriteLine("{0} Name = {1}, Points = {2}, Types = {3}",
                                  string.Join("", Enumerable.Repeat("    ", result.level)),
                                  result.name,
                                  result.points,
                                  string.Join(",", result.types.OrderBy(x => x.Key).Select(x => x.Key.ToString() + ":" + x.Value.ToString()).ToArray())
                                  );
            }
        }