题目链接:
「剑指 Offer」 - 学习计划 - 力扣(LeetCode)全球极客挚爱的技术成长平台
题目一:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<int> levelOrder(TreeNode* root) {
vector<int> ans;
queue<TreeNode*> q;
q.push(root);
while(!q.empty()){
int size = q.size();
vector<int> level;
while(size--){
TreeNode* cur = q.front();
q.pop();
if(!cur){
continue;
}
ans.push_back(cur->val);
q.push(cur->left);
q.push(cur->right);
}
}
return ans;
}
};
题目二:
模板笔记转自:
BFS
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
vector<vector<int>> ans;
queue<TreeNode*> q;
q.push(root);
while(!q.empty()){
int size = q.size();
vector<int> level;
while(size--){
TreeNode* cur = q.front();
q.pop();
if(!cur){
continue;
}
level.push_back(cur->val);
q.push(cur->left);
q.push(cur->right);
}
if(!level.empty())
ans.push_back(level);
}
return ans;
}
};
DFS
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
vector<vector<int>> ans;
dfs(ans,0,root);
return ans;
}
void dfs(vector<vector<int>> &ans,int level,TreeNode* root){
if(root == NULL) return;
if(ans.size() == level - 1 || ans.size() == level){
ans.push_back(vector<int> ());
}
ans[level].push_back(root->val);
dfs(ans,level + 1 , root->left);
dfs(ans,level + 1 , root->right);
}
};
补充:C++中vector<vector<int> >
转自:关于C++中vector<vector<int> >的使用_xiziwen_code-CSDN博客
vector<vector<int> > A;
for(int i = 0; i < 2; ++i) A.push_back(vector<int>());
A[0].push_back(0);
A[0].push_back(1);
A[0].push_back(2);
A[1].push_back(3);
A[1].push_back(4);
//vector<vector<int> >A中的vector元素的个数
len = A.size();
//vector<vector<int> >A中第i个vector元素的长度
len = A[i].size();
//根据前面的插入,可知输出1。
printf("%d\n", A[0][1]);
题目三:没写新的,就是在题目2的bfs解法最后加了一个reverse
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
vector<vector<int>> ans;
queue<TreeNode*> q;
q.push(root);
int dep =0;
while(!q.empty()){
int size = q.size();
vector<int> level;
while(size--){
TreeNode* cur = q.front();
q.pop();
if(!cur){
continue;
}
level.push_back(cur->val);
q.push(cur->left);
q.push(cur->right);
}
if(!level.empty())
ans.push_back(level);
}
for(int i = 1; i < ans.size(); i += 2)//ans.size()就是一共就有几行
reverse(ans[i].begin(), ans[i].end());
return ans;
}
};