package main
import . "nc_tools"
import ("container/list")
/*
 * type TreeNode struct {
 *   Val int
 *   Left *TreeNode
 *   Right *TreeNode
 * }
 */

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 * 
 * @param root TreeNode类 
 * @return int整型一维数组
*/
func PrintFromTopToBottom( root *TreeNode ) []int {
    // write code here
    // 特殊条件判断
    if root == nil {
        return nil
    }

    // 使用 golang 提供的双向链表模拟队列的使用
    
    q := list.New()
    // q := *list.List{}

    q.PushBack(root)

    ans := []int{}

    for q.Len() > 0 {
        size := q.Len()

        for size > 0 {
            node := q.Remove(q.Front()).(*TreeNode)

            ans = append(ans, node.Val)

            if node.Left != nil {
                q.PushBack(node.Left)
            }

            if node.Right != nil {
                q.PushBack(node.Right)
            }

            size--
        }
    }

    return ans
}