1) level order traversal by a explicit queue 2) constant space, use `next` pointer to represent the queue