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

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++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C program for  nth nodes of  inorder traversals
#include <stdio.h>
#include <stdlib.h>
  
/* 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;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

"""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

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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

chevron_right



Output:

10

Time Complexity: O(n)



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 :


5


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