题目
如题
分析
第一层的下标其实就是0,level其实就是层数,level确认把每个数字放入对应的层里, 其实这种思想是一种BFS思想
解法1:递归
#include<stdio.h>
#include<iostream>
#include<stdlib.h>
#include<vector>
#include<queue>
using namespace std;
struct TreeNode{
int val;
TreeNode* left;
TreeNode* right;
TreeNode() :val(0), left(NULL), right(NULL){}
};
class MyClass
{
public:
vector<vector<int>> levelOrder(TreeNode* root) {
vector<vector<int>> res;
recordLevelOrder(root, 0, res);
return res;
}
void recordLevelOrder(TreeNode* root, int level, vector<vector<int>>& res){
if (root == NULL){
return;
}
if (res.size() == level){
res.push_back({});
}
res[level].push_back(root->val);
if (root->left){
recordLevelOrder(root->left, level + 1, res);
}
if (root->right){
recordLevelOrder(root->right, level + 1, res);
}
return;
}
};
解法2:
class MyClass
{
public:
vector<vector<int>> levelOrder(TreeNode* root) {
vector<vector<int>> res;
if (root == NULL)
{
return res;
}
queue<TreeNode*> st;
st.push(root);
while (!st.empty())
{
vector<int> tmp;
int size = st.size();
for (int i = 0; i < size; i++)
{
TreeNode* node = st.front();
st.pop();
int val = node->val;
tmp.push_back(val);
if (node->left)
{
st.push(node->left);
}
if (node->right)
{
st.push(node->right);
}
}
res.push_back(tmp);
}
return res;
}
};