您的位置:首页 > 职场人生

《慕课网玩转算法面试》笔记及习题解答6.4.~6.6

2017-09-03 23:52 537 查看
leetcode 102

vector<vector<int>> levelOrder(TreeNode* root) {
vector<vector<int>> res;
if(root == NULL)
return res;
//层序遍历
queue<pair<TreeNode*,int>> q;
//root作为第0层
q.push( make_pair(root,0) );
while(!q.empty()){
TreeNode* node = q.front().first;
int level = q.front().second;
//当level == res.size()时,说明res[level]为空,此时新建一个vector插入
if(level == res.size()){
vector<int> tmp;
tmp.push_back(node->val);
res.push_back(tmp);
}
else res[level].push_back(node->val);
if(node->left) q.push( make_pair(node->left ,level+1) );
if(node->right) q.push( make_pair(node->right ,level+1) );
q.pop();
}
return res;
}

练习:

leetcode 107

vector<vector<int>> levelOrderBottom(TreeNode* root) {
vector<vector<int>> res;
if(root == NULL)
return res;
//层序遍历
queue<pair<TreeNode*,int>> q;
//root作为第0层
q.push( make_pair(root,0) );
while(!q.empty()){
TreeNode* node = q.front().first;
int level = q.front().second;
//当level == res.size()时,说明res[level]为空,此时新建一个vector插入
if(level == res.size()){
vector<int> tmp;
tmp.push_back(node->val);
res.push_back(tmp);
}
else res[level].push_back(node->val);
if(node->left) q.push( make_pair(node->left ,level+1) );
if(node->right) q.push( make_pair(node->right ,level+1) );
q.pop();
}
reverse(res.begin(), res.end());
return res;
}

leetcode 103

vector<vector<int>> zigzagLevelOrder(TreeNode* root) {
vector<vector<int>> res;
if(root == NULL)
return res;
//层序遍历
queue<pair<TreeNode*,int>> q;
//root作为第0层
q.push( make_pair(root,0) );
while(!q.empty()){
TreeNode* node = q.front().first;
int level = q.front().second;
//当level == res.size()时,说明res[level]为空,此时新建一个vector插入
if(level == res.size()){
vector<int> tmp;
tmp.push_back(node->val);
res.push_back(tmp);
}
else res[level].push_back(node->val);
if(node->left) q.push( make_pair(node->left ,level+1) );
if(node->right) q.push( make_pair(node->right ,level+1) );
q.pop();
}
//对于奇数行的数据翻转
for(int i = 1; i < res.size(); i+=2)
reverse(res[i].begin(), res[i].end());
return res;
}

leetcode 199

vector<int> rightSideView(TreeNode* root) {
vector<int> res;
if(root == NULL)
return res;
//层序遍历
queue<pair<TreeNode*,int>> q;
//root作为第0层
q.push( make_pair(root,0) );
while(!q.empty()){
TreeNode* node = q.front().first;
int level = q.front().second;
//当level == res.size()时,说明res[level]为空,此时push
if(level == res.size()){
res.push_back(node->val);
}
//当level != res.size()时,说明res[level]已经存在,我们只需要将它覆盖,最后覆盖的值一定是该层最右边的值
else res[level] = (node->val);
if(node->left) q.push( make_pair(node->left ,level+1) );
if(node->right) q.push( make_pair(node->right ,level+1) );
q.pop();
}
return res;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: