add level traverse and make it neat