Find n-th node in Preorder traversal of a Binary Tree - GeeksforGeeks

23 Jun, 2021
Given a Binary tree and a number N, write a program to find the N-th node in the Preorder traversal of the given Binary tree.Prerequisite: Tree TraversalExamples:  
Input:      N = 4
              11
            /   \
           21    31
         /   \
        41     51
Output: 51
Explanation: Preorder Traversal of given Binary Tree is 11 21 41 51 31, 
so 4th node will be 51.

Input:      N = 5
             25
           /    \
          20    30
        /    \ /   \
      18    22 24   32
Output: 30
 
The idea to solve this problem is to do preorder traversal of the given binary tree and keep track of the count of nodes visited while traversing the tree and print the current node when the count becomes equal to N.  
C++
Java
Python3
C#
Javascript
// C++ program to find n-th node of// Preorder Traversal of Binary Tree#include <bits/stdc++.h>using namespace std; // Tree nodestruct Node {    int data;    Node *left, *right;}; // function to create new nodestruct Node* createNode(int item){    Node* temp = new Node;    temp->data = item;    temp->left = NULL;    temp->right = NULL;     return temp;} // function to find the N-th node in the preorder// traversal of a given binary treevoid NthPreordernode(struct Node* root, int N){    static int flag = 0;     if (root == NULL)        return;     if (flag <= N) {        flag++;         // prints the n-th node of preorder traversal        if (flag == N)            cout << root->data;         // left recursion        NthPreordernode(root->left, N);         // right recursion        NthPreordernode(root->right, N);    }} // Driver codeint main(){    // construction of binary tree    struct Node* root = createNode(25);    root->left = createNode(20);    root->right = createNode(30);    root->left->left = createNode(18);    root->left->right = createNode(22);    root->right->left = createNode(24);    root->right->right = createNode(32);     // nth node    int N = 6;     // prints n-th found found    NthPreordernode(root, N);     return 0;}
// Java program to find n-th node of// Preorder Traversal of Binary Treeclass GFG{ // Tree nodestatic class Node{    int data;    Node left, right;}; // function to create new nodestatic Node createNode(int item){    Node temp = new Node();    temp.data = item;    temp.left = null;    temp.right = null;     return temp;}static int flag = 0; // function to find the N-th node in the preorder// traversal of a given binary treestatic void NthPreordernode(Node root, int N){          if (root == null)        return;     if (flag <= N)    {        flag++;         // prints the n-th node of preorder traversal        if (flag == N)            System.out.print( root.data);         // left recursion        NthPreordernode(root.left, N);         // right recursion        NthPreordernode(root.right, N);    }} // Driver codepublic static void main(String args[]){    // construction of binary tree    Node root = createNode(25);    root.left = createNode(20);    root.right = createNode(30);    root.left.left = createNode(18);    root.left.right = createNode(22);    root.right.left = createNode(24);    root.right.right = createNode(32);     // nth node    int N = 6;     // prints n-th found found    NthPreordernode(root, N);}} // This code contributed by Arnab Kundu
# Python program to find n-th node of# Preorder Traversal of Binary Tree class createNode():     def __init__(self, data):        self.data = data        self.left = None        self.right = None                  # function to find the N-th node in the preorder# traversal of a given binary treeflag = [0]def NthPreordernode(root, N):    if (root == None):        return     if (flag[0] <= N):        flag[0] += 1         # prints the n-th node of preorder traversal        if (flag[0] == N):            print(root.data)         # left recursion        NthPreordernode(root.left, N)         # right recursion        NthPreordernode(root.right, N)         # Driver codeif __name__ == '__main__':         # construction of binary tree    root = createNode(25)    root.left = createNode(20)    root.right = createNode(30)    root.left.left = createNode(18)    root.left.right = createNode(22)    root.right.left = createNode(24)    root.right.right = createNode(32)     # nth node    N = 6     # prints n-th found found    NthPreordernode(root, N) # This code is contributed by SHUBHAMSINGH10
// C# program to find n-th node of// Preorder Traversal of Binary Treeusing System;     class GFG{ // Tree nodepublic class Node{    public int data;    public Node left, right;}; // function to create new nodestatic Node createNode(int item){    Node temp = new Node();    temp.data = item;    temp.left = null;    temp.right = null;     return temp;}static int flag = 0; // function to find the N-th node in the preorder// traversal of a given binary treestatic void NthPreordernode(Node root, int N){          if (root == null)        return;     if (flag <= N)    {        flag++;         // prints the n-th node of preorder traversal        if (flag == N)            Console.Write( root.data);         // left recursion        NthPreordernode(root.left, N);         // right recursion        NthPreordernode(root.right, N);    }} // Driver codepublic static void Main(String []args){    // construction of binary tree    Node root = createNode(25);    root.left = createNode(20);    root.right = createNode(30);    root.left.left = createNode(18);    root.left.right = createNode(22);    root.right.left = createNode(24);    root.right.right = createNode(32);     // nth node    int N = 6;     // prints n-th found found    NthPreordernode(root, N);}} // This code is contributed by Rajput-Ji
<script>// Javascript program to find n-th node of// Preorder Traversal of Binary Tree // Tree nodeclass Node{    constructor()    {        this.data = 0;        this.left = null;        this.right = null;    }}; // function to create new nodefunction createNode(item){    var temp = new Node();    temp.data = item;    temp.left = null;    temp.right = null;     return temp;} var flag = 0; // function to find the N-th node in the preorder// traversal of a given binary treefunction NthPreordernode(root, N){          if (root == null)        return;     if (flag <= N)    {        flag++;         // prints the n-th node of preorder traversal        if (flag == N)            document.write( root.data);         // left recursion        NthPreordernode(root.left, N);         // right recursion        NthPreordernode(root.right, N);    }} // Driver code// construction of binary treevar root = createNode(25);root.left = createNode(20);root.right = createNode(30);root.left.left = createNode(18);root.left.right = createNode(22);root.right.left = createNode(24);root.right.right = createNode(32); // nth nodevar N = 6; // prints n-th found foundNthPreordernode(root, N); // This code is contributed by famously.</script>
24
 
Time Complexity: O(n), where n is the number of nodes in the given binary tree. Auxiliary Space: O(1) 
SHUBHAMSINGH10
andrew1234
Rajput-Ji
famously
Binary Tree
Preorder Traversal
tree-traversal
Tree
Tree
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Introduction to Tree Data Structure
DFS traversal of a tree using recursion
Top 50 Tree Coding Problems for Interviews
Find the node with minimum value in a Binary Search Tree
Count number of times each Edge appears in all possible paths of a given Tree
Print Binary Tree in 2-Dimensions
Real-time application of Data Structures
Iterative Postorder Traversal | Set 2 (Using One Stack)
Find maximum (or minimum) in Binary Tree
Overview of Data Structures | Set 2 (Binary Tree, BST, Heap and Hash)