You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: 0332-reconstruct-itinerary.rs
    path of file: ./repos/NeetCode-Solutions/12_Advanced_Graphs/01_Reconstruct_Itinerary
    
    the code of the file until where you have to start completion: /*
Problem: LeetCode 332 - Reconstruct Itinerary

Key Idea:
The key idea is to treat the given list of tickets as a directed graph, where each airport is a node, and the tickets represent directed edges. We need to find an itinerary that starts from "JFK" and visits all airports once while minimizing the lexicographical order.

Approach:
1. Build a graph using a HashMap with airport codes as keys and a BinaryHeap (min heap) containing Reverse references to destination airports.
2. Create a vector to store the final itinerary.
3. Start with "JFK" as the initial airport and use a stack to perform a 
    
    pub fn find_itinerary(tickets: Vec<Vec<String>>) -> Vec<String> {
        let mut graph: HashMap<&str, BinaryHeap<Reverse<&str>>> = HashMap::new();

        // Build the graph.
        for ticket in &tickets {
            graph
                .entry(&ticket[0])
                .or_insert(BinaryHeap::new())
                .push(Reverse(&ticket[1]));
        }

        let mut itinerary: Vec<String> = Vec::with_capacity(tickets.len() + 1);
        let mut stack: Vec<&str> = vec!["JFK"];

        while let Some(src) = stack.last().cloned() {
            if let Some(dsts) = graph.get_mut(src) {
                if let Some(dst) = dsts.pop() {
                    stack.push(dst.0);
                    continue;
                }
            }

            if let Some(last) = stack.pop() {
                itinerary.push(last.to_string());
            }
        }

        itinerary.reverse();
        itinerary
    }