childNode = new TrieNode[2];
public void insert(int num) {
for (int i = 31; i >= 0; i--) {
int bit = (num >>> i) & 1;
if (curNode.childNode[bit] == null) {
curNode.childNode[bit] = new TrieNode();
curNode = curNode.childNode[bit];
public int findMaximumXOR(int[] nums) {
if (nums == null || nums.length == 0) {
TrieNode curNode = trie.root;
for (int i = 31; i >= 0; i--) {
int bit = (num >>> i) & 1;
if (curNode.childNode[bit ^ 1] != null) {
curNode = curNode.childNode[bit ^ 1];
curNode = curNode.childNode[bit];
max = Math.max(max, curSum);