Flood Fill in a 3d Surface

Flood Fill in a 3d Surface
Hi, I´m trying to made a flood fill (for path finding) and i have 2d version of flood fill, but now i must to modify my code, because i have to flood hills and ramps. I have no idea where to start…i have been reading something on internet. But nothing clear.

Here is my 2d flood fill code

Here is my flood fill code

using System;
using System.Linq;
using UnityEngine;
using System.Collections.Generic;

public class FloodFill
{
    private static FloodFill _instance;

    public static FloodFill Instance { get { return _instance ?? (_instance = new FloodFill()); } }

    private FloodFill(){ }

    private List<GameObject> Inicialize(GameObject seed)
    {
        return new List<GameObject> { CreateNode(seed.transform, seed.transform.position, 0) };
    }

    private GameObject CreateNode(Transform parent, Vector3 nextPosition, int currentLevel)
    {
        var tile = new GameObject(Tags.Tile, typeof(SphereCollider), typeof(Tile)) { tag = Tags.Tile };
        tile.transform.position = nextPosition;
        tile.transform.parent = parent;
        tile.transform.rotation = Quaternion.identity;
        tile.GetComponent<Tile>().Level = currentLevel;

        return tile;
    }

    public GameObject[] FlowerFill(int limit, GameObject seed)
    {
        var tiles = Inicialize(seed);
        GameObject[] nodes;
        var d = new[] { seed.transform.forward, seed.transform.right, -seed.transform.forward, -seed.transform.right };
        var level = 0;
        do
        {
            nodes = (from tile in tiles where tile.GetComponent<Tile>().Level == level select tile).ToArray();
            var length = nodes.Length;
            for (var i = 0; i < length; i++)
            {
                var levelNode = nodes[i];
                var t = levelNode.transform.position;

                for (var j = 0; j < 4; j++)
                {
                    var dir = d[j];
                    var nextPosition = t + dir;
                    if (!Physics.Linecast(t, nextPosition + 0.45F * dir))
                        tiles.Add(CreateNode(seed.transform, nextPosition, level + 1));
                }
            }
            level++;
        } while (level < limit  nodes.Length > 0);
        return tiles.ToArray();
    }
}