Very intuitive clean code in c++ using trie and without map
\nclass Node {\n    private:\n    Node* links[2];\n    public:\n    bool containsKey(int bit) {\n        return links[bit] != nullptr;\n    }\n    void put(int 
```\nclass Node {\n    private:\n    Node* links[2];\n    public:\n    bool containsKey(int bit) {\n        return links[bit] != nullptr;\n    }\n    void put(int bit, Node* node) {\n        links[bit] = node;\n    }\n    Node* get(int bit) {\n        return links[bit];\n    }\n};\n\nclass Trie {\n    private:\n    Node* root;\n    public:\n    Trie() {\n        root = new Node();\n    }\n    void insert(int num) {\n        Node* node = root;\n        for(int i=31; i>=0; i--) {\n            int bit = (num >> i) & 1;\n            if(!node->containsKey(bit)) {\n                node->put(bit, new Node());\n            }\n            node = node->get(bit);\n        }\n    }\n    int findMax(int num) {\n        Node* node = root;\n        int maxHere = 0;\n        for(int i=31; i>=0; i--) {\n            int bit = (num >> i) & 1;\n            if(node->containsKey(!bit)) {\n                maxHere |= (1 << i);\n                node = node->get(!bit);\n            } else {\n                node = node->get(bit);\n            }\n        }\n        return maxHere;\n    }\n};\nclass Solution {\npublic:\n    int findMaximumXOR(vector<int>& nums) {\n        Trie trie;\n        int ans = 0;\n        for(auto it : nums) {\n            trie.insert(it);\n            ans = max(ans, trie.findMax(it));\n        }\n        return ans;\n    }\n};\n```
['Bit Manipulation', 'Trie', 'C']