二叉树的层次遍历
对于一颗二叉树,如何对此进行层次遍历,并且按行输出。
这个问题,有以下两个解法:
class Solution {
public:
vector<vector<int>> levelOrder(Node* root) {
BFS(root, 0);
return res;
}
public:
void BFS(Node* node, int level)
{
if(node == nullptr) return;
if(level == res.size())
res.push_back(vector<int> ());
res[level].push_back(node->val);
for(auto n:node->children)
BFS(n, level+1);
}
private:
vector<vector<int>> res;
};
解法2(使用队列)
class Solution {
public:
vector<vector<int>> levelOrder(Node* root) {
vector<vector<int>> output;
if (!root) return output;
queue<Node*> treeTemp;
treeTemp.push(root);
auto treeNum = treeTemp.size();
while (treeNum) {
vector<int> valTemp;
for (auto i=0; i<treeNum; ++i) {
root = treeTemp.front();
valTemp.push_back(root->val);
treeTemp.pop();
for (auto childTemp:root->children)
treeTemp.push(childTemp);
}
output.push_back(valTemp);
treeNum = treeTemp.size();
}
return output;
}
};