Find n-th node of inorder traversal

29 Jan, 2022
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
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 the above approach.
C
Java
Python3
C#
Javascript
// C program for  nth nodes of  inorder traversals#include <stdio.h>#include <stdlib.h> /* A binary tree node has data, pointer to left childand a pointer to right child */struct Node {    int data;    struct Node* left;    struct Node* right;}; /* Helper function that allocates a new node with thegiven 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 childand a pointer to right child */static class Node {    int data;     Node left;     Node right;}   /* Helper function that allocates a new node with thegiven 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 node of   inorder traversal""" # A Binary Tree Node# Utility function to create a# new tree nodeclass 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, print the nth    node of inorder traversal"""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 print element        if (count[0] == n):            print(node.data, end = " ")         """ now recur on right child """        NthInorder(node.right, n)                         # Driver Codeif __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 traversalsusing System; class GFG{public static int count = 0; /* A binary tree node has data, pointerto left child and a pointer to right child */public class Node{    public int data;    public Node left;    public Node right;} /* Helper function that allocates anew node with the given data and nullleft 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 itsnth 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 Codepublic 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
<script> // JavaScript program for  nth nodes of  inorder traversals /* A binary tree node has data, pointer to left childand a pointer to right child */class Node{    constructor(data)    {        this.data=data;        this.left=this.right=null;    }} let count =0;  /* Given a binary tree, print its nth nodes of inorder*/function NthInorder(node,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)            document.write(node.data+" ");             /* now recur on right child */        NthInorder(node.right, n);    }} /* Driver program to test above functions*/let  root = new Node(10);root.left = new Node(20);root.right = new Node(30);root.left.left = new Node(40);root.left.right = new Node(50); let n = 4; NthInorder(root, n);   // This code is contributed by avanitrachhadiya2155 </script>
Output: 
Chapters
descriptions off, selected
captions settings, opens captions settings dialog
captions off, selected
English
This is a modal window.
Beginning of dialog window. Escape will cancel and close the window.
End of dialog window.
10
Time Complexity: O(n)
YouTube<div class="player-unavailable"><h1 class="message">An error occurred.</h1><div class="submessage"><a href="https://www.youtube.com/watch?v=nMRTfhTkxC4" target="_blank">Try watching this video on www.youtube.com</a>, or enable JavaScript if it is disabled in your browser.</div></div>
 
andrew1234
shrikanth13
SHUBHAMSINGH10
siddharthx_07
avanitrachhadiya2155
simmytarika5
tree-traversal
Tree
Tree
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Introduction to Data Structures
Introduction to Tree Data Structure
Inorder Tree Traversal without Recursion
What is Data Structure: Types, Classifications and Applications
Binary Tree | Set 3 (Types of Binary Tree)
Binary Tree | Set 2 (Properties)
A program to check if a binary tree is BST or not
Diameter of a Binary Tree
Decision Tree
Lowest Common Ancestor in a Binary Tree | Set 1