地址:https://leetcode-cn.com/problems/binary-tree-level-order-traversal/
思路:BFS/DFS
思路一、BFS:利用广度优先搜索逐层搜索,每次搜索一层,将下一层的加入队列中即可
思路二、DFS:利用深度优先搜索,则为从左向右搜索,对于层数可用变量进行记录即可
Code BFS:
class Solution {
vector<vector<int>> res;
queue<TreeNode *> que;
public:
vector<vector<int>> levelOrder(TreeNode* root) {
if(root==NULL) return res;
que.push(root);
int k=-1,n;
TreeNode *rt;
while(!que.empty()){
n=que.size(); ++k;
res.push_back(vector<int>{});
while(n--){
rt=que.front(); que.pop();
res[k].push_back(rt->val);
if(rt->left) que.push(rt->left);
if(rt->right) que.push(rt->right);
}
}
return res;
}
};
Code DFS:
class Solution {
vector<vector<int>> res;
public:
vector<vector<int>> levelOrder(TreeNode* root) {
if(root==NULL) return res;
DFS(root,0);
return res;
}
void DFS(TreeNode *root,int k){
if(root==NULL) return;
if(res.size()<=k) res.push_back(vector<int>{});
res[k].push_back(root->val);
DFS(root->left,k+1);
DFS(root->right,k+1);
}
};