987.vertical-order-traversal-of-

2020-05-21  本文已影响0人  Optimization

关键词和模型构建

class Solution {
public:
    vector<vector<int>> verticalTraversal(TreeNode* root) {
        if(!root) return {};
        int min_x = INT_MAX;
        int max_x = INT_MIN;
        map<pair<int,int>,set<int>> h;  //{y,x} ->{vals}
        traverse(root,0,0,min_x,max_x,h);
        vector<vector<int>> ans(max_x - min_x + 1);
        for(const auto& m:h){
            int x = m.first.second - min_x;
            ans[x].insert(end(ans[x]), begin(m.second), end(m.second));
        }
        return ans;
    }

    void traverse(TreeNode* root, int x, int y, int& min_x, int& max_x,
                                map<pair<int,int>, set<int>>& h ){
            if(!root) return;
            min_x = min(min_x, x);
            max_x = max(max_x, x);
            h[{y,x}].insert(root->val);
            traverse(root->left, x-1, y+1, min_x, max_x,h);
            traverse(root->right,x+1, y+1, min_x,max_x,h);
    }
};
上一篇 下一篇

猜你喜欢

热点阅读