《慕课网玩转算法面试》笔记及习题解答6.4.~6.6
来源:互联网 发布:apache启动报错 编辑:程序博客网 时间:2024/06/05 11:25
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; }
阅读全文
0 0
- 《慕课网玩转算法面试》笔记及习题解答6.4.~6.6
- 《慕课网玩转算法面试》笔记及习题解答1
- 《慕课网玩转算法面试》笔记及习题解答2
- 《慕课网玩转算法面试》笔记及习题解答3.5~3.6
- 《慕课网玩转算法面试》笔记及习题解答3.1 ~3.4
- 《慕课网玩转算法面试》笔记及习题解答3.7 ~3.8
- 《慕课网玩转算法面试》笔记及习题解答4
- 《慕课网玩转算法面试》笔记及习题解答5.1.~5.3
- 《慕课网玩转算法面试》笔记及习题解答5.4.~5.6
- 《慕课网玩转算法面试》笔记及习题解答6.7
- 《慕课网玩转算法面试》笔记及习题解答7.1~7.3
- 《慕课网玩转算法面试》笔记及习题解答7.4~7.6
- 《慕课网玩转算法面试》笔记及习题解答8.1~8.3
- 《慕课网玩转算法面试》笔记及习题解答8.4~8.5
- 《慕课网玩转算法面试》笔记及习题解答9.3
- 《慕课网玩转算法面试》笔记及习题解答9.4
- 《慕课网玩转算法面试》笔记及习题解答9.8
- Android面试习题及个人解答
- 51Nod-1459 迷宫游戏(dij算法)
- 【C++】list的使用方法
- 让自己成为一个有趣的人
- 《知道做到》阅读总结
- 【Linux学习笔记】32:Shell编程中的变量测试
- 《慕课网玩转算法面试》笔记及习题解答6.4.~6.6
- 账号密码登录与用户交互
- 利用Thread和Headler 将TextView修改
- 简单质因数分解
- CentOs7主机无法访问虚拟机linux的apache
- Centos 7.2 failed to load SELinux policy freezing
- 《笨办法学python》加分习题31——我的答案
- Eclipse插件ESLint安装
- IOS 更换闪屏页面出现的问题