题源:
描述
不分行从上往下打印出二叉树的每个节点,同层节点从左至右打印。例如输入{8,6,10,#,#,2,1},如以下图中的示例二叉树,则依次打印8,6,10,2,1(空节点不打印,跳过),请你将打印的结果存放到一个数组里面,返回。
![](https://img-blog.csdnimg.cn/img_convert/ede941ca5d7436f0c5a75ca0ab5862a2.png)
数据范围:
0<=节点总数<=1000
-1000<=节点值<=1000
示例1
输入:
{8,6,10,#,#,2,1}
返回值:
[8,6,10,2,1]
示例2
输入:
{5,4,#,3,#,2,#,1}
返回值:
[5,4,3,2,1]
思路:
本质上其实是层序遍历即可,用队列来实现,一层一层添加节点
题解:
/*
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> ans;
queue<TreeNode*> q;
if(root == nullptr) return ans;
q.push(root); //根节点入队
while(!q.empty()){
TreeNode *node = q.front();
q.pop();
ans.push_back(node->val);
if(node->left) //左孩子不为空时,入队
q.push(node->left);
if(node->right) //右孩子
q.push(node->right);
}
return ans;
}
};