symmetric tree
gray code
improve