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:
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=53c6a9fdb39de30ef3b8a22d5d1c0da1

The code basically solves problem 259 at projecteuler.net (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

Thanks,
jgilray