Working Rust, but is it at all idiomatic?

I blindly converted some Racket code (a dialect of Scheme) to Rust. The good news: It works and is about 5x faster than Racket. I would love some advice on how to improve this code and make it more idiomatic.

Here are my thoughts:

  1. I used to_owned() in two places. Can they be avoided?
  2. I use VecDeque in the "merging" section of the code and Vec in the "expression tree evaluating" section. They felt appropriate, but maybe something else is more effective or efficient?
  3. I pass &mut structures around instead of returning structures. I kind of struggled with returning references and this seemed to work OK
  4. My code feels clunky, for example, I couldn't get fold to work and I also couldn't use the HashSet::union function so I ended up with a lot of for loops

Here is the code:

The code basically solves problem 259 at (I apologize to the PE purists for posting code), which is to sum all the positive integers that result from combining all the partitions of the digits with the basic 4 arithmetic functions