题源:
描述
不分行从上往下打印出二叉树的每个节点,同层节点从左至右打印。例如输入{8,6,10,#,#,2,1},如以下图中的示例二叉树,则依次打印8,6,10,2,1(空节点不打印,跳过),请你将打印的结果存放到一个数组里面,返回。
数据范围:
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;
}
};
该问题要求按照从上到下、从左到右的顺序打印二叉树的每个节点,可以使用层序遍历方法解决。具体做法是利用队列存储节点,从根节点开始,每次取出节点并将其子节点(如果存在)入队,直到队列为空。最后返回存储的节点值数组。
193

被折叠的 条评论
为什么被折叠?



