二叉树的层序遍历可以使用队列来进行。
使用c要从头开始造轮子,属实有些麻烦,考虑到c++有现成的队列函数quene,用c++来进行比较方便。
以下摘自力扣官方题解
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
vector <vector <int>> ret;
if (!root) {
return ret;
}
queue <TreeNode*> q;
q.push(root);
while (!q.empty()) {
int currentLevelSize = q.size();
ret.push_back(vector <int> ());
for (int i = 1; i <= currentLevelSize; ++i) {
auto node = q.front(); q.pop();
ret.back().push_back(node->val);
if (node->left) q.push(node->left);
if (node->right) q.push(node->right);
}
}
return ret;
}
};
作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/binary-tree-level-order-traversal/solution/er-cha-shu-de-ceng-xu-bian-li-by-leetcode-solution/
来源:力扣(LeetCode)
主要思路
1搭建容器ret
2判断根节点是否为空,为空可以直接返回根节点。
3生成队列q
4外层循环遍历各层
5取出队列中元素个数currentLevelSize
6循环currentLevelSize次以遍历该层所有元素
7(第i次循环中的过程解读)取出队列第一个元素(即为当前此要遍历的俩个元素的母节点),弹出该元素,将该母节点的所有子节点插入队列中。
8内层全部循环后队列中只剩一层的所有元素,将队列中所有元素插入容器ret中
9继续外层循环直到队列为空,说明已经遍历完成
10返回容器res