# Check if a Binary Tree (not BST) has duplicate values

Check if a Binary Tree (not BST) has duplicate values

Examples:

```Input : Root of below tree
1
/   \
2     3
\
2
Output : Yes
Explanation : The duplicate value is 2.

Input : Root of below tree
1
/   \
20     3
\
4
Output : No
Explanation : There are no duplicates.
```

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

A simple solution is to store inorder traversal of given binary tree in an array. Then check if array has duplicates or not. We can avoid the use of array and solve the problem in O(n) time. The idea is to use hashing. We traverse the given tree, for every node, we check if it already exists in hash table. If exists, we return true (found duplicate). If it does not exist, we insert into hash table.

## C++

 `// C++ Program to check duplicates ` `// in Binary Tree ` `#include ` `using` `namespace` `std; ` ` `  `// A binary tree Node has data, ` `// pointer to left child ` `// and a pointer to right child ` `struct` `Node { ` `    ``int` `data; ` `    ``struct` `Node* left; ` `    ``struct` `Node* right; ` `}; ` ` `  `// Helper function that allocates ` `// a new Node with the given data ` `// and NULL left and right pointers. ` `struct` `Node* newNode(``int` `data) ` `{ ` `    ``struct` `Node* node = ``new` `Node; ` `    ``node->data = data; ` `    ``node->left = node->right = NULL; ` `    ``return` `(node); ` `} ` ` `  `bool` `checkDupUtil(Node* root, unordered_set<``int``> &s) ` `{ ` `    ``// If tree is empty, there are no ` `    ``// duplicates.  ` `    ``if` `(root == NULL) ` `       ``return` `false``; ` ` `  `    ``// If current node's data is already present. ` `    ``if` `(s.find(root->data) != s.end()) ` `       ``return` `true``; ` ` `  `    ``// Insert current node ` `    ``s.insert(root->data); ` `     `  `    ``// Recursively check in left and right ` `    ``// subtrees. ` `    ``return` `checkDupUtil(root->left, s) ||  ` `           ``checkDupUtil(root->right, s); ` `} ` ` `  `// To check if tree has duplicates ` `bool` `checkDup(``struct` `Node* root) ` `{ ` `    ``unordered_set<``int``> s; ` `    ``return` `checkDupUtil(root, s); ` `} ` ` `  `// Driver program to test above functions ` `int` `main() ` `{ ` `    ``struct` `Node* root = newNode(1); ` `    ``root->left = newNode(2); ` `    ``root->right = newNode(2); ` `    ``root->left->left = newNode(3); ` `    ``if` `(checkDup(root)) ` `        ``printf``(``"Yes"``); ` `    ``else` `        ``printf``(``"No"``); ` ` `  `    ``return` `0; ` `} `

## Java

 `// Java Program to check duplicates  ` `// in Binary Tree  ` `import` `java.util.HashSet; ` `public` `class` `CheckDuplicateValues { ` ` `  `    ``//Function that used HashSet to find presence of duplicate nodes ` `    ``public` `static` `boolean` `checkDupUtil(Node root, HashSet s)  ` `    ``{  ` `        ``// If tree is empty, there are no  ` `        ``// duplicates.   ` `        ``if` `(root == ``null``)  ` `            ``return` `false``;  ` `   `  `        ``// If current node's data is already present.  ` `        ``if` `(s.contains(root.data))  ` `            ``return` `true``;  ` `   `  `        ``// Insert current node  ` `        ``s.add(root.data);  ` `       `  `        ``// Recursively check in left and right  ` `        ``// subtrees.  ` `        ``return` `checkDupUtil(root.left, s) || checkDupUtil(root.right, s);  ` `    ``}  ` `   `  `    ``// To check if tree has duplicates  ` `    ``public` `static` `boolean` `checkDup(Node root)  ` `    ``{  ` `        ``HashSet s=``new` `HashSet<>(); ` `        ``return` `checkDupUtil(root, s);  ` `    ``}  ` ` `  `    ``public` `static` `void` `main(String args[]) { ` `        ``Node root = ``new` `Node(``1``);  ` `        ``root.left = ``new` `Node(``2``);  ` `        ``root.right = ``new` `Node(``2``);  ` `        ``root.left.left = ``new` `Node(``3``);  ` `        ``if` `(checkDup(root))  ` `            ``System.out.print(``"Yes"``);  ` `        ``else` `            ``System.out.print(``"No"``);  ` `    ``} ` `} ` ` `  `// A binary tree Node has data,  ` `// pointer to left child  ` `// and a pointer to right child  ` `class` `Node {  ` `    ``int` `data;  ` `    ``Node left,right;  ` `    ``Node(``int` `data) ` `    ``{ ` `        ``this``.data=data; ` `    ``} ` `}; ` `//This code is contributed by Gaurav Tiwari `

## Python

 `""" Program to check duplicates  ` `# in Binary Tree """` ` `  `# Helper function that allocates a new  ` `# node with the given data and None  ` `# left and right poers.                                  ` `class` `newNode:  ` ` `  `    ``# Construct to create a new node  ` `    ``def` `__init__(``self``, key):  ` `        ``self``.data ``=` `key ` `        ``self``.left ``=` `None` `        ``self``.right ``=` `None` ` `  `def` `checkDupUtil( root, s) : ` ` `  `    ``# If tree is empty, there are no  ` `    ``# duplicates.  ` `    ``if` `(root ``=``=` `None``) : ` `        ``return` `False` ` `  `    ``# If current node's data is already present.  ` `    ``if` `root.data ``in` `s:  ` `        ``return` `True` ` `  `    ``# Insert current node  ` `    ``s.add(root.data)  ` `     `  `    ``# Recursively check in left and right  ` `    ``# subtrees.  ` `    ``return` `checkDupUtil(root.left, s) ``or` `checkDupUtil(root.right, s)  ` ` `  ` `  `# To check if tree has duplicates  ` `def` `checkDup( root) : ` ` `  `    ``s``=``set``()  ` `    ``return` `checkDupUtil(root, s)  ` ` `  ` `  `# Driver Code  ` `if` `__name__ ``=``=` `'__main__'``: ` `    ``root ``=` `newNode(``1``)  ` `    ``root.left ``=` `newNode(``2``)  ` `    ``root.right ``=` `newNode(``2``)  ` `    ``root.left.left ``=` `newNode(``3``)  ` `    ``if` `(checkDup(root)): ` `        ``print``(``"Yes"``) ` `    ``else``: ` `        ``print``(``"No"``) ` ` `  `# This code is contributed by ` `# Shubham Singh(SHUBHAMSINGH10) `

## C#

 `// C# Program to check duplicates  ` `// in Binary Tree  ` `using` `System; ` `using` `System.Collections; ` `using` `System.Collections.Generic;  ` ` `  `class` `CheckDuplicateValues ` `{ ` ` `  `    ``//Function that used HashSet to  ` `    ``// find presence of duplicate nodes ` `    ``public` `static` `Boolean checkDupUtil(Node root, HashSet<``int``> s)  ` `    ``{  ` `        ``// If tree is empty, there are no  ` `        ``// duplicates.  ` `        ``if` `(root == ``null``)  ` `            ``return` `false``;  ` `     `  `        ``// If current node's data is already present.  ` `        ``if` `(s.Contains(root.data))  ` `            ``return` `true``;  ` `     `  `        ``// Insert current node  ` `        ``s.Add(root.data);  ` `         `  `        ``// Recursively check in left and right  ` `        ``// subtrees.  ` `        ``return` `checkDupUtil(root.left, s) ||  ` `                ``checkDupUtil(root.right, s);  ` `    ``}  ` `     `  `    ``// To check if tree has duplicates  ` `    ``public` `static` `Boolean checkDup(Node root)  ` `    ``{  ` `        ``HashSet<``int``> s = ``new` `HashSet<``int``>(); ` `        ``return` `checkDupUtil(root, s);  ` `    ``}  ` ` `  `    ``public` `static` `void` `Main(String []args)  ` `    ``{ ` `        ``Node root = ``new` `Node(1);  ` `        ``root.left = ``new` `Node(2);  ` `        ``root.right = ``new` `Node(2);  ` `        ``root.left.left = ``new` `Node(3);  ` `        ``if` `(checkDup(root))  ` `            ``Console.Write(``"Yes"``);  ` `        ``else` `            ``Console.Write(``"No"``);  ` `    ``} ` `} ` ` `  `// A binary tree Node has data,  ` `// pointer to left child  ` `// and a pointer to right child  ` `public` `class` `Node ` `{  ` `    ``public` `int` `data;  ` `    ``public` `Node left, right;  ` `    ``public` `Node(``int` `data) ` `    ``{ ` `        ``this``.data = data; ` `    ``} ` `}; ` ` `  `// This code is contributed by Arnab Kundu `

Output:

```Yes
```

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

My Personal Notes arrow_drop_up Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.

Article Tags :
Practice Tags :

1

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.