コード例 #1
0
        public static void Recursively <T>(this T seed, SeedInclusion seedInclusion, Action <T, int> action, Func <T, IEnumerable <T> > getNext)
            where T : class
        {
            var stack = new Stack <Tuple <T, int> >();

            if (seedInclusion == SeedInclusion.Include)
            {
                stack.Push(new Tuple <T, int>(seed, 0));
            }
            else
            {
                var next = getNext(seed);
                foreach (var node in next.Reverse())
                {
                    stack.Push(new Tuple <T, int>(node, 0));
                }
            }

            while (stack.Any())
            {
                var node = stack.Pop();
                action(node.Item1, node.Item2);

                var next = getNext(node.Item1);
                foreach (var following in next.Reverse())
                {
                    stack.Push(new Tuple <T, int>(following, node.Item2 + 1));
                }
            }
        }
コード例 #2
0
        public static void Recursively <T>(this T seed, SeedInclusion seedInclusion, Action <T> action, Func <T, T> getNext)
            where T : class
        {
            var stack = new Stack <T>();

            if (seedInclusion == SeedInclusion.Include)
            {
                stack.Push(seed);
            }
            else
            {
                var next = getNext(seed);
                if (next != null)
                {
                    stack.Push(next);
                }
            }

            while (stack.Any())
            {
                var node = stack.Pop();
                action(node);

                var next = getNext(node);
                if (next != null)
                {
                    stack.Push(next);
                }
            }
        }
コード例 #3
0
        public static void RecursivelyReversed <T>(this T seed, SeedInclusion seedInclusion, Action <T> action, Func <T, IEnumerable <T> > getNext)
            where T : class
        {
            var stack = new Stack <T>();

            seed.Recursively(seedInclusion, stack.Push, getNext);

            while (stack.Any())
            {
                action(stack.Pop());
            }
        }