using GrokAlgorithms.Chapter5_BreadthFirstSearch; static class Bfs { public static TreeNode? Search(TreeNode root, Func condition) { Queue> queue = new(); queue.Enqueue(root); HashSet> visited = []; while (queue.Count > 0) { var curr = queue.Dequeue(); if (visited.Contains(curr)) continue; if (condition(curr.Value)) return curr; foreach (var child in curr.Children) queue.Enqueue(child); visited.Add(curr); } return null; } }