leetcode 每日一题 107. Binary Tree Level Order Traversal II
2016-03-26 15:51
323 查看
此题是上一道题的变体···最简单的方法就是把插入的方式变一变就可以了,或者把push_back函数改成insert
或者在最后reverse一下 都可以 但是奇怪的是,时间复杂度很高,竟然要64ms
后来看到discuss中一个8ms的程序 觉得差不多 并没什么区别 代码如下:
https://leetcode.com/discuss/92987/share-c-solution-8ms-easy-to-understand
后来改了一下 发现 用insert的方法和用reverse的方法差的真的很多·····
我发现用了reverse之后,时间复杂度由64猛减少到4ms 超过很多人···
代码中有注释,嘿嘿
或者在最后reverse一下 都可以 但是奇怪的是,时间复杂度很高,竟然要64ms
后来看到discuss中一个8ms的程序 觉得差不多 并没什么区别 代码如下:
https://leetcode.com/discuss/92987/share-c-solution-8ms-easy-to-understand
class Solution { public: vector<vector<int>> levelOrderBottom(TreeNode* root) { vector<vector<int>> vv; std::queue<TreeNode*> q; TreeNode* tn; int n; if(root) q.push(root); while(!q.empty()) { n = q.size(); std::vector<int> v; while(n) { tn = q.front(); q.pop(); v.push_back(tn->val); if(tn->left) q.push(tn->left); if(tn->right) q.push(tn->right); n--; } vv.push_back(v); } reverse(vv.begin(),vv.end()); return vv; } };
后来改了一下 发现 用insert的方法和用reverse的方法差的真的很多·····
我发现用了reverse之后,时间复杂度由64猛减少到4ms 超过很多人···
代码中有注释,嘿嘿
class Solution { public: vector<vector<int>> levelOrderBottom(TreeNode* root) { vector<vector<int>> res; vector<int> level; TreeNode* node; if(root==NULL) return res; //注意root为空的时候返回的类型也是res这种 queue<TreeNode*> q; int currlev=1; int nextlev=0; q.push(root); while(!q.empty()){ node=q.front(); currlev--; q.pop(); level.push_back(node->val); if(node->left){ q.push(node->left); nextlev++; } if(node->right){ q.push(node->right); nextlev++; } if(currlev==0){ //res.insert(res.begin(),level); 这句话会让程序明显减慢 res.push_back(level); currlev=nextlev; nextlev=0; level.clear();//level要清空 } } reverse(res.begin(),res.end()); //这句话起了翻转作用 return res; } };
相关文章推荐
- MATLAB中字符串数组的创建和引用
- 关于工资的秘密
- String源代码
- 20145219 《Java程序设计》第04周学习总结
- javascript的错误处理
- PAT (Advanced Level) Practise 1107 Social Clusters (30)
- 【LeetCode】290. Word Pattern
- android中permission_group与permisson区别、作用?
- Imageview属性
- GDC2016 [全境封锁],11个种类5个派系的敌人设计思路
- 对java中int与Integer的一些理解
- 梳理caffe代码blob(三)
- PHP设计模式
- WinXP系统提示未安装打印机驱动的故障原因及解决方法
- Airplane mode的三种切换方式
- Node.js之HTPP URL
- PAT (Advanced Level) Practise 1106 Lowest Price in Supply Chain (25)
- HDU1520 Anniversary party(树形dp)
- Poj 2985 树状数组求第k大
- Linux asm系统调用:32位和64位的区别