从上往下打印出二叉树的每个节点,同层节点从左至右打印。

struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
    TreeNode(int x) :
            val(x), left(NULL), right(NULL) {
    }
};
class Solution {
public:
    /*
    思路:类似于层次遍历,利用队列。
    先打印根节点,并把根节点左右子节点入队,打印队首元素并出队,将其左右孩子入队...循环如此一直到队列为空。
    */
    vector<int> PrintFromTopToBottom(TreeNode* root) {
        //将vector作为返回值类型
        vector<int> printTree;
        //若为空树,直接返回空的数组
        if(root==nullptr)
            return printTree;

        //建立辅助队列
        queue<TreeNode*> qTree;
        TreeNode *tNode=root;
        //根节点入队
        qTree.push(tNode);
        //若队列不为空且树指针不指向空,执行循环:
        while(!qTree.empty()&&tNode!=nullptr)
        {
            //将队列首元素放入打印数组中
            printTree.push_back(tNode->val);
            //若对手元素左右子树不为空,压入队列
            if(tNode->left)
                qTree.push(tNode->left);
            if(tNode->right)
                qTree.push(tNode->right);
            //队首元素出队
            qTree.pop();
            //tNode赋值为新的队首元素
            tNode=qTree.front();
        }
        return printTree;
    }

};