Related Articles
Find a pair with given sum in BST
• Difficulty Level : Easy
• Last Updated : 22 Jan, 2021

Given a BST and a sum, find if there is a pair with given sum.

Example:

```Input : sum = 28
Root of below tree```

`Output : Pair is found (16, 12)`

### Recommended: Please solve it on “PRACTICE” first, before moving on to the solution

We have discussed different approaches to find a pair with given sum in below post.Find a pair with given sum in a Balanced BST
In this post, hashing based solution is discussed. We traverse binary search tree by inorder way and insert node’s value into a set. Also check for any node, difference between given sum and node’s value in set, if it is found then pair exists otherwise it doesn’t exist.

## C++

 `// CPP program to find a pair with``// given sum using hashing``#include ``using` `namespace` `std;` `struct` `Node {``    ``int` `data;``    ``struct` `Node *left, *right;``};` `Node* NewNode(``int` `data)``{``    ``Node* temp = (Node*)``malloc``(``sizeof``(Node));``    ``temp->data = data;``    ``temp->left = NULL;``    ``temp->right = NULL;``    ``return` `temp;``}` `Node* insert(Node* root, ``int` `key)``{``    ``if` `(root == NULL)``        ``return` `NewNode(key);``    ``if` `(key < root->data)``        ``root->left = insert(root->left, key);``    ``else``        ``root->right = insert(root->right, key);``    ``return` `root;``}` `bool` `findpairUtil(Node* root, ``int` `sum,``                  ``unordered_set<``int``>& set)``{``    ``if` `(root == NULL)``        ``return` `false``;` `    ``if` `(findpairUtil(root->left, sum, set))``        ``return` `true``;` `    ``if` `(set.find(sum - root->data) != set.end()) {``        ``cout << ``"Pair is found ("` `<< sum - root->data``             ``<< ``", "` `<< root->data << ``")"` `<< endl;``        ``return` `true``;``    ``}``    ``else``        ``set.insert(root->data);` `    ``return` `findpairUtil(root->right, sum, set);``}` `void` `findPair(Node* root, ``int` `sum)``{``    ``unordered_set<``int``> set;``    ``if` `(!findpairUtil(root, sum, set))``        ``cout << ``"Pairs do not exit"` `<< endl;``}` `// Driver code``int` `main()``{``    ``Node* root = NULL;``    ``root = insert(root, 15);``    ``root = insert(root, 10);``    ``root = insert(root, 20);``    ``root = insert(root, 8);``    ``root = insert(root, 12);``    ``root = insert(root, 16);``    ``root = insert(root, 25);``    ``root = insert(root, 10);` `    ``int` `sum = 33;``    ``findPair(root, sum);` `    ``return` `0;``}`

## Java

 `// JAVA program to find a pair with``// given sum using hashing` `import` `java.util.*;` `class` `GFG {` `    ``static` `class` `Node {``        ``int` `data;``        ``Node left, right;``    ``};` `    ``static` `Node NewNode(``int` `data)``    ``{``        ``Node temp = ``new` `Node();``        ``temp.data = data;``        ``temp.left = ``null``;``        ``temp.right = ``null``;``        ``return` `temp;``    ``}` `    ``static` `Node insert(Node root, ``int` `key)``    ``{``        ``if` `(root == ``null``)``            ``return` `NewNode(key);``        ``if` `(key < root.data)``            ``root.left = insert(root.left, key);``        ``else``            ``root.right = insert(root.right, key);``        ``return` `root;``    ``}` `    ``static` `boolean` `findpairUtil(Node root, ``int` `sum,``                                ``HashSet set)``    ``{``        ``if` `(root == ``null``)``            ``return` `false``;` `        ``if` `(findpairUtil(root.left, sum, set))``            ``return` `true``;` `        ``if` `(set.contains(sum - root.data)) {``            ``System.out.println(``"Pair is found ("``                               ``+ (sum - root.data) + ``", "``                               ``+ root.data + ``")"``);``            ``return` `true``;``        ``}``        ``else``            ``set.add(root.data);` `        ``return` `findpairUtil(root.right, sum, set);``    ``}` `    ``static` `void` `findPair(Node root, ``int` `sum)``    ``{``        ``HashSet set = ``new` `HashSet();``        ``if` `(!findpairUtil(root, sum, set))``            ``System.out.print(``"Pairs do not exit"``                             ``+ ``"\n"``);``    ``}` `    ``// Driver code``    ``public` `static` `void` `main(String[] args)``    ``{``        ``Node root = ``null``;``        ``root = insert(root, ``15``);``        ``root = insert(root, ``10``);``        ``root = insert(root, ``20``);``        ``root = insert(root, ``8``);``        ``root = insert(root, ``12``);``        ``root = insert(root, ``16``);``        ``root = insert(root, ``25``);``        ``root = insert(root, ``10``);` `        ``int` `sum = ``33``;``        ``findPair(root, sum);``    ``}``}` `// This code is contributed by PrinciRaj1992`

## Python3

 `# Python3 program to find a pair with``# given sum using hashing``import` `sys``import` `math`  `class` `Node:``    ``def` `__init__(``self``, data):``        ``self``.data ``=` `data``        ``self``.left ``=` `None``        ``self``.right ``=` `None`  `def` `insert(root, data):``    ``if` `root ``is` `None``:``        ``return` `Node(data)``    ``if``(data < root.data):``        ``root.left ``=` `insert(root.left, data)``    ``if``(data > root.data):``        ``root.right ``=` `insert(root.right, data)``    ``return` `root`  `def` `findPairUtil(root, summ, unsorted_set):``    ``if` `root ``is` `None``:``        ``return` `False``    ``if` `findPairUtil(root.left, summ, unsorted_set):``        ``return` `True``    ``if` `unsorted_set ``and` `(summ``-``root.data) ``in` `unsorted_set:``        ``print``(``"Pair is Found ({},{})"``.``format``(summ``-``root.data, root.data))``        ``return` `True``    ``else``:``        ``unsorted_set.add(root.data)` `    ``return` `findPairUtil(root.right, summ, unsorted_set)`  `def` `findPair(root, summ):``    ``unsorted_set ``=` `set``()``    ``if``(``not` `findPairUtil(root, summ, unsorted_set)):``        ``print``(``"Pair do not exist!"``)`  `# Driver code``if` `__name__ ``=``=` `'__main__'``:``    ``root ``=` `None``    ``root ``=` `insert(root, ``15``)``    ``root ``=` `insert(root, ``10``)``    ``root ``=` `insert(root, ``20``)``    ``root ``=` `insert(root, ``8``)``    ``root ``=` `insert(root, ``12``)``    ``root ``=` `insert(root, ``16``)``    ``root ``=` `insert(root, ``25``)``    ``root ``=` `insert(root, ``10``)``    ``summ ``=` `33``    ``findPair(root, summ)` `# This code is contributed by Vikash Kumar 37`

## C#

 `// C# program to find a pair with``// given sum using hashing``using` `System;``using` `System.Collections.Generic;` `class` `GFG {` `    ``class` `Node {``        ``public` `int` `data;``        ``public` `Node left, right;``    ``};` `    ``static` `Node NewNode(``int` `data)``    ``{``        ``Node temp = ``new` `Node();``        ``temp.data = data;``        ``temp.left = ``null``;``        ``temp.right = ``null``;``        ``return` `temp;``    ``}` `    ``static` `Node insert(Node root, ``int` `key)``    ``{``        ``if` `(root == ``null``)``            ``return` `NewNode(key);``        ``if` `(key < root.data)``            ``root.left = insert(root.left, key);``        ``else``            ``root.right = insert(root.right, key);``        ``return` `root;``    ``}` `    ``static` `bool` `findpairUtil(Node root, ``int` `sum,``                             ``HashSet<``int``> ``set``)``    ``{``        ``if` `(root == ``null``)``            ``return` `false``;` `        ``if` `(findpairUtil(root.left, sum, ``set``))``            ``return` `true``;` `        ``if` `(``set``.Contains(sum - root.data)) {``            ``Console.WriteLine(``"Pair is found ("``                              ``+ (sum - root.data) + ``", "``                              ``+ root.data + ``")"``);``            ``return` `true``;``        ``}``        ``else``            ``set``.Add(root.data);` `        ``return` `findpairUtil(root.right, sum, ``set``);``    ``}` `    ``static` `void` `findPair(Node root, ``int` `sum)``    ``{``        ``HashSet<``int``> ``set` `= ``new` `HashSet<``int``>();``        ``if` `(!findpairUtil(root, sum, ``set``))``            ``Console.Write(``"Pairs do not exit"``                          ``+ ``"\n"``);``    ``}` `    ``// Driver code``    ``public` `static` `void` `Main(String[] args)``    ``{``        ``Node root = ``null``;``        ``root = insert(root, 15);``        ``root = insert(root, 10);``        ``root = insert(root, 20);``        ``root = insert(root, 8);``        ``root = insert(root, 12);``        ``root = insert(root, 16);``        ``root = insert(root, 25);``        ``root = insert(root, 10);` `        ``int` `sum = 33;``        ``findPair(root, sum);``    ``}``}` `// This code is contributed by Rajput-Ji`

Output:

`Pair is found (8, 25)`

Time Complexity :O(n).

My Personal Notes arrow_drop_up