dsalgo 0.3.10

A package for Datastructures and Algorithms.
Documentation
pub fn euler_tour_edges(
    g: &[Vec<usize>],
    root: usize,
) -> Vec<isize> {
    let n = g.len();

    let mut tour = Vec::with_capacity(n << 1);

    fn dfs(
        g: &[Vec<usize>],
        tour: &mut Vec<isize>,
        u: usize,
        p: usize,
    ) {
        tour.push(u as isize);

        for &v in g[u].iter() {
            if v != p {
                dfs(g, tour, v, u);
            }
        }

        tour.push(!u as isize);
    }

    dfs(g, &mut tour, root, n);

    tour
}

#[cfg(test)]

mod tests {

    use super::*;

    #[test]

    fn test() {
        let g = vec![vec![1, 2], vec![0, 3], vec![0], vec![1]];

        assert_eq!(euler_tour_edges(&g, 0), [0, 1, 3, -4, -2, 2, -3, -1]);
    }
}