题目描述
从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。
算法思路
是一个典型的二叉树广度优先遍历的例子。广度优先经常利用队列的先进先出实现的。
特例处理:当树的根结点为空时,直接返回空列表。
建立一个队列,用于遍历每个父节点。遍历了这个父节点的左节点和右节点之后出队列。
class Solution {
public:
vector<int> levelOrder(TreeNode* root) {
queue<TreeNode*> Q,temp;
vector<int> res;
if(!root)
{
return {};
}
Q.push(root);
while(!Q.empty())
{
res.push_back(Q.front()->val);
if(Q.front()->left)
{
Q.push(Q.front()->left);
}
if(Q.front()->right)
{
Q.push(Q.front()->right);
}
Q.pop();
}
return res;
}
};
另一扩展题目:
从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。
描述:
算法思路
与上面不同的是每一层要分开打印。只需要设立for循环将队列的长度设为循环次数就可
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
if(!root)
{
return{};
}
int i=0;
vector<vector<int>> res;
Q.push(root);
while(!Q.empty())
{
vector<int> temp;
for(i=Q.size();i>0;i--)
{
auto top=Q.front();
Q.pop();
temp.push_back(top->val);
if(top->left)
Q.push(top->left);
if(top->right)
Q.push(top->right);
}
res.push_back(temp);
}
return res;
}
private:
queue<TreeNode*> Q;
};