added traverse() and append()