public static List <(Direction, Quadtree)> EqualNeighbours(Quadtree quadtree) { var directions = new[] { Direction.North, Direction.East, Direction.South, Direction.West, }; var equalNeighbours = new List <(Direction, Quadtree)>(); foreach (var direction in directions) { bool overflow; var neighbourLocationCode = quadtree.EqualNeighbourLocationCode(direction.Value, out overflow); if (overflow) { continue; } var neighbour = quadtree.Root.Find(neighbourLocationCode); if (neighbour == null || neighbour.Level != quadtree.Level) { continue; } equalNeighbours.Add((direction, neighbour)); } return(equalNeighbours); }