I would like to implement a BinaryTree data structure on Rust, but I have several questions:
Shall I do only Node structure, or shall I do Node and BinaryTree structures separately? (I have seen both kinds of implementation)
Shall there be a parent field in the Node struct?
Which smart pointers should i use? In LeetCode implementation, Rc and RefCell are used, but i think that it is a good idea to use Box, Rc and RefCell, because Binary Tree and recursive Binary Tree operations can take a lof memory.
If you want to have such parent pointers, you will have to use Rc for the left_child and right_child fields and std::rc::Weak for the parent field, to avoid reference cycles.
Rc is already a pointer type—the reference-counted data is stored on the heap behind a layer of indirection. There's no need to add a second indirection by boxing it. If you don't need parent pointers, you could also use Box on its own.
This is more a "what kind of API do you want to expose" question than a particularly-Rust question, to me.
If you're trying to make a container type (like a Vec or a BTreeMap), then I'd expect there to be a BinaryTree struct that I interact with as well as a private Node struct used internally that as the user of the container I wouldn't need to know about.
But it depends how you're trying to use it, and what your goals are in making the thing.