题目描述
从上往下打印出二叉树的每个节点,同层节点从左至右打印。
考察点:二叉树及队列;层次遍历。
思路:就是层次遍历,利用队列,每层孩子节点依次入队,再按顺序出队找各自孩子节点入队。直到队列空。
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<int> result;
if (root == NULL)
return result;
queue<TreeNode*> q;
q.push(root); //根节点入队
while (!q.empty()) //队列非空
{
TreeNode* pNode = q.front();//取出队首元素,并不会出队
result.push_back(pNode->val);//保存队首元素的值
q.pop();//出队
if (pNode->left)//左孩子节点入队
q.push(pNode->left);
if (pNode->right)//右孩子节点入队
q.push(pNode->right);
}
return result;
}
};