这篇介绍一下二叉树按层遍历并打印层信息的算法
LeetCode 102. 二叉树的层次遍历
算法一
vector<vector<int>> levelOrder(TreeNode* root) {
if (root == nullptr) {
return vector<vector<int>>();
}
queue<TreeNode*> q;
q.push(root);
vector<vector<int>> res;
while (!q.empty()) {
int count = q.size();
vector<int> tmp;
while (count > 0) {
root = q.front();
q.pop();
tmp.push_back(root->val);
if (root->left) {
q.push(root->left);
}
if (root->right) {
q.push(root->right);
}
count--;
}
res.push_back(tmp);
}
return res;
}
算法二
vector<vector<int>> levelOrderBottom(TreeNode* root) {
if (root == nullptr) {
return vector<vector<int>>();
}
vector<vector<int>> res(1, vector<int>());
int index = 0;
queue<TreeNode*> q;
q.push(root);
TreeNode* last = root;
TreeNode* nLast = nullptr;
while (!q.empty()) {
root = q.front();
q.pop();
res.at(index).push_back(root->val);
if (root->left) {
q.push(root->left);
nLast = root->left;
}
if (root->right) {
q.push(root->right);
nLast = root->right;
}
if (root == last && !q.empty()) {
last = nLast;
res.push_back(vector<int>());
index++;
}
}
return res;
}
如有侵权,请联系删除,如有错误或更好的解法,欢迎大家指正,谢谢