Vietnam has many places to visit as Sapa, Hanoi, Halong, Hue, Hoian, HCMC. I think 3 weeks are enough to visit these places. We stayed at 3 stars hotels and all are fine with good price, it depends on your budget but we have more choices, I would rather to spend money to visit more places than staying expensive hotels, only need them when you relax on the beach.
Domestic flights are not expensive and easy to book but train is new experience. Dont like tourist bus because they can speak english and too crowed.