二叉树广度优先BFS遍历结合队列实现,当读取完一个结点的数据,将该节点的左右子节点放入队列,再从队列中弹出刚刚读取完数据的结点
class Solution
{
public:
vector<vector<int>> levelOrderBottom(TreeNode* root)
{
vector<vector<int>> res;
if (!root) return res;
//存放结点的队列
queue<TreeNode*> q;
//存放每层得到的数据
vector<int> temp;
//首先放入根节点
q.push(root);
//记录每一层的结点个数,控制for循环次数
int length;
while (!q.empty())
{
//得到该层的结点个数
length = q.size();
//用for循环和length来得到每层的数据内容
for (int i = 0; i < length; i++)
{
//向temp中放入队头结点数据
temp.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();
}
//读取完一层后将该层内如放入结果中
res.push_back(temp);
//清空
temp.clear();
}
//当队列为空表明已经完成广度优先遍历
//题目要求从叶子结点所在层向根结点显示,逆序即可
reverse(res.begin(), res.end());
return res;
}
};