# Find n-th node of inorder traversal

Given the binary tree and you have to find out the n-th node of inorder traversal.

Examples:

```Input : n = 4
10
/   \
20     30
/   \
40     50
Output : 10
Inorder Traversal is : 40 20 50 10 30

Input :  n = 3
7
/   \
2     3
/   \
8     5
Output : 8
Inorder: 2 7 8 3 5
3th node is 8
```

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

We do simple Inorder Traversal. While doing the traversal, we keep track of count of nodes visited so far. When count becomes n, we print the node.

Below is the implementation of above approach.

 `// C program for  nth nodes of  inorder traversals ` `#include ` `#include ` ` `  `/* 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 = ` `          ``(``struct` `Node*)``malloc``(``sizeof``(``struct` `Node)); ` `    ``node->data = data; ` `    ``node->left = NULL; ` `    ``node->right = NULL; ` ` `  `    ``return` `(node); ` `} ` ` `  `/* Given a binary tree, print its nth nodes of inorder*/` `void` `NthInorder(``struct` `Node* node, ``int` `n) ` `{ ` `    ``static` `int` `count = 0; ` `    ``if` `(node == NULL) ` `        ``return``; ` ` `  `    ``if` `(count <= n) { ` ` `  `        ``/* first recur on left child */` `        ``NthInorder(node->left, n); ` `        ``count++; ` ` `  `        ``// when count = n then print element ` `        ``if` `(count == n) ` `            ``printf``(``"%d "``, node->data); ` ` `  `        ``/* now recur on right child */` `        ``NthInorder(node->right, n); ` `    ``} ` `} ` ` `  `/* Driver program to test above functions*/` `int` `main() ` `{ ` `    ``struct` `Node* root = newNode(10); ` `    ``root->left = newNode(20); ` `    ``root->right = newNode(30); ` `    ``root->left->left = newNode(40); ` `    ``root->left->right = newNode(50); ` ` `  `    ``int` `n = 4; ` ` `  `    ``NthInorder(root, n); ` `    ``return` `0; ` `} `

 `// Java  program for  nth nodes of  inorder traversals  ` ` `  `import` `java.util. *; ` ` `  `class` `Solution ` `{ ` `static` `int` `count =``0``;   ` `/* A binary tree node has data, pointer to left child  ` `and a pointer to right child */` `static` `class` `Node {  ` `    ``int` `data;  ` `     ``Node left;  ` `     ``Node right;  ` `}  ` `   `  `/* Helper function that allocates a new node with the  ` `given data and null left and right pointers. */` ` ``static` `Node newNode(``int` `data)  ` `{  ` `     ``Node node = ``new` `Node();  ` `    ``node.data = data;  ` `    ``node.left = ``null``;  ` `    ``node.right = ``null``;  ` `   `  `    ``return` `(node);  ` `}  ` `   `  ` `  `/* Given a binary tree, print its nth nodes of inorder*/` `static` `void` `NthInorder( Node node, ``int` `n)  ` `{   ` `    ``if` `(node == ``null``)  ` `        ``return``;  ` `   `  `    ``if` `(count <= n) {  ` `        ``/* first recur on left child */` `        ``NthInorder(node.left, n);  ` `        ``count++;  ` `   `  `        ``// when count = n then print element  ` `        ``if` `(count == n)  ` `            ``System.out.printf(``"%d "``, node.data);  ` `   `  `        ``/* now recur on right child */` `        ``NthInorder(node.right, n);  ` `    ``}  ` `}  ` `   `  `/* Driver program to test above functions*/` `public` `static` `void` `main(String args[]) ` `{  ` `     ``Node root = newNode(``10``);  ` `    ``root.left = newNode(``20``);  ` `    ``root.right = newNode(``30``);  ` `    ``root.left.left = newNode(``40``);  ` `    ``root.left.right = newNode(``50``);  ` `   `  `    ``int` `n = ``4``;  ` `   `  `    ``NthInorder(root, n);  ` `}  ` `} ` ` `  `// This code is contributed ` `// by Arnab Kundu `

 `"""Python3 program for nth nodes of ` `   ``inorder traversals"""` ` `  `# A Binary Tree Node  ` `# Utility function to create a  ` `# new tree node  ` `class` `newNode:  ` ` `  `    ``# Constructor to create a newNode  ` `    ``def` `__init__(``self``, data):  ` `        ``self``.data ``=` `data  ` `        ``self``.left ``=` `None` `        ``self``.right ``=` `None` `        ``self``.visited ``=` `False` ` `  `count ``=` `[``0``] ` ` `  `""" Given a binary tree, prits nth  ` `    ``nodes of inorder"""` `def` `NthInorder(node, n): ` ` `  `    ``if` `(node ``=``=` `None``): ` `        ``return` ` `  `    ``if` `(count[``0``] <``=` `n): ` ` `  `        ``""" first recur on left child """` `        ``NthInorder(node.left, n)  ` `        ``count[``0``] ``+``=` `1` ` `  `        ``# when count = n then prelement  ` `        ``if` `(count[``0``] ``=``=` `n): ` `            ``print``(node.data, end ``=` `" "``)  ` ` `  `        ``""" now recur on right child """` `        ``NthInorder(node.right, n) ` `                         `  `# Driver Code ` `if` `__name__ ``=``=` `'__main__'``: ` ` `  `    ``root ``=` `newNode(``10``)  ` `    ``root.left ``=` `newNode(``20``)  ` `    ``root.right ``=` `newNode(``30``)  ` `    ``root.left.left ``=` `newNode(``40``)  ` `    ``root.left.right ``=` `newNode(``50``)  ` ` `  `    ``n ``=` `4` ` `  `    ``NthInorder(root, n) ` ` `  `# This code is contributed  ` `# by SHUBHAMSINGH10 `

 `// C# program for nth nodes of  ` `// inorder traversals  ` `using` `System; ` ` `  `class` `GFG ` `{ ` `public` `static` `int` `count = 0; ` ` `  `/* 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; ` `    ``public` `Node right; ` `} ` ` `  `/* Helper function that allocates a  ` `new node with the given data and null  ` `left and right pointers. */` `public` `static` `Node newNode(``int` `data) ` `{ ` `    ``Node node = ``new` `Node(); ` `    ``node.data = data; ` `    ``node.left = ``null``; ` `    ``node.right = ``null``; ` ` `  `    ``return` `(node); ` `} ` ` `  `/* Given a binary tree, print its  ` `nth nodes of inorder*/` `public` `static` `void` `NthInorder(Node node, ``int` `n) ` `{ ` `    ``if` `(node == ``null``) ` `    ``{ ` `        ``return``; ` `    ``} ` ` `  `    ``if` `(count <= n) ` `    ``{ ` `        ``/* first recur on left child */` `        ``NthInorder(node.left, n); ` `        ``count++; ` ` `  `        ``// when count = n then print element  ` `        ``if` `(count == n) ` `        ``{ ` `            ``Console.Write(``"{0:D} "``, node.data); ` `        ``} ` ` `  `        ``/* now recur on right child */` `        ``NthInorder(node.right, n); ` `    ``} ` `} ` ` `  `// Driver Code ` `public` `static` `void` `Main(``string``[] args) ` `{ ` `    ``Node root = newNode(10); ` `    ``root.left = newNode(20); ` `    ``root.right = newNode(30); ` `    ``root.left.left = newNode(40); ` `    ``root.left.right = newNode(50); ` ` `  `    ``int` `n = 4; ` ` `  `    ``NthInorder(root, n); ` `} ` `} ` ` `  `// This code is contributed by Shrikant13 `

Output:
```10
```

Time Complexity: O(n)

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 :