题目
从上往下打印出二叉树的每个节点,同层节点从左至右打印。
思路
(碎碎念:看到这个题目,我就想起来以前写决策树的时候用过,所以这个记得特别清楚,可惜现在不搞机器学习了,哎迷之伤感,浪费了多少时间啊,老老实实学开发不好么。。。)
- 用一个队列保存树的结点。
- 每次出队列一个结点,把该结点的不为空的左右结点入队列。
- 循环直到队列为空。
代码
/*
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) {
if ( root == nullptr ) return {};
vector<int> res;
queue<TreeNode*> q;
q.push(root);
while ( !q.empty() ) {
TreeNode* node = q.front();
q.pop();
if ( node->left != nullptr )
q.push( node->left );
if ( node->right != nullptr )
q.push( node->right );
res.push_back( node->val );
}
return res;
}
};