二叉树的层序遍历
题目描述1
代码
c++
java
python
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode() : val(0), left(nullptr), right(nullptr) {}
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
TreeNode(int x, TreeNode* left, TreeNode* right) : val(x), left(left), right(right) {}
};
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
queue<TreeNode*> que;
vector<vector<int>> res;
// 将树节点添加到队列
if (root != nullptr)
que.push(root);
while (!que.empty()) {
vector<int> tmp;
for (int i = que.size(); i > 0; --i) {
root = que.front();
// 出队,方便后边添加左右节点到队列
que.pop();
tmp.push_back(root->val);
if (root->left != nullptr)
que.push(root->left);
if (root->right != nullptr)
que.push(root->right);
}
res.push_back(tmp);
}
return res;
}
};
int main() {
TreeNode* root = new TreeNode(3);
TreeNode* TreeNode1 = new TreeNode(9);
TreeNode* TreeNode2 = new TreeNode(20);
TreeNode* TreeNode3 = new TreeNode(15);
TreeNode* TreeNode4 = new TreeNode(7);
root->left = TreeNode1;
root->right = TreeNode2;
TreeNode1->left = nullptr;
TreeNode1->right = nullptr;
TreeNode2->left = TreeNode3;
TreeNode2->right = TreeNode4;
TreeNode3->left = nullptr;
TreeNode3->right = nullptr;
TreeNode4->left = nullptr;
TreeNode4->right = nullptr;
Solution solution;
vector<vector<int>> result = solution.levelOrder(root);
for (int i = 0; i < result.size(); ++i) {
cout << "[";
for (int j = 0; j < result[i].size(); ++j) {
cout <<"[" <<result[i][j] << "]";
}
cout << "]" << endl;
}
}