traverse by level