leetcode 每日一题 107. Binary Tree Level Order Traversal II

来源:互联网 发布:matlab矩阵求转置 编辑:程序博客网 时间:2024/06/10 19:39

此题是上一道题的变体···最简单的方法就是把插入的方式变一变就可以了,或者把push_back函数改成insert

或者在最后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;    }};






0 0
原创粉丝点击