《慕课网玩转算法面试》笔记及习题解答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