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 Traversal
Examples:
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.
Implementation:
C++
#include <bits/stdc++.h>
using namespace std;
struct Node {
int data;
Node *left, *right;
};
struct Node* createNode( int item)
{
Node* temp = new Node;
temp->data = item;
temp->left = NULL;
temp->right = NULL;
return temp;
}
void NthPreordernode( struct Node* root, int N)
{
static int flag = 0;
if (root == NULL)
return ;
if (flag <= N) {
flag++;
if (flag == N)
cout << root->data;
NthPreordernode(root->left, N);
NthPreordernode(root->right, N);
}
}
int main()
{
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);
int N = 6;
NthPreordernode(root, N);
return 0;
}
|
Java
class GFG
{
static class Node
{
int data;
Node left, right;
};
static Node createNode( int item)
{
Node temp = new Node();
temp.data = item;
temp.left = null ;
temp.right = null ;
return temp;
}
static int flag = 0 ;
static void NthPreordernode(Node root, int N)
{
if (root == null )
return ;
if (flag <= N)
{
flag++;
if (flag == N)
System.out.print( root.data);
NthPreordernode(root.left, N);
NthPreordernode(root.right, N);
}
}
public static void main(String args[])
{
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 );
int N = 6 ;
NthPreordernode(root, N);
}
}
|
Python3
class createNode():
def __init__( self , data):
self .data = data
self .left = None
self .right = None
flag = [ 0 ]
def NthPreordernode(root, N):
if (root = = None ):
return
if (flag[ 0 ] < = N):
flag[ 0 ] + = 1
if (flag[ 0 ] = = N):
print (root.data)
NthPreordernode(root.left, N)
NthPreordernode(root.right, N)
if __name__ = = '__main__' :
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 )
N = 6
NthPreordernode(root, N)
|
C#
using System;
class GFG
{
public class Node
{
public int data;
public Node left, right;
};
static Node createNode( int item)
{
Node temp = new Node();
temp.data = item;
temp.left = null ;
temp.right = null ;
return temp;
}
static int flag = 0;
static void NthPreordernode(Node root, int N)
{
if (root == null )
return ;
if (flag <= N)
{
flag++;
if (flag == N)
Console.Write( root.data);
NthPreordernode(root.left, N);
NthPreordernode(root.right, N);
}
}
public static void Main(String []args)
{
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);
int N = 6;
NthPreordernode(root, N);
}
}
|
Javascript
<script>
class Node
{
constructor()
{
this .data = 0;
this .left = null ;
this .right = null ;
}
};
function createNode(item)
{
var temp = new Node();
temp.data = item;
temp.left = null ;
temp.right = null ;
return temp;
}
var flag = 0;
function NthPreordernode(root, N)
{
if (root == null )
return ;
if (flag <= N)
{
flag++;
if (flag == N)
document.write( root.data);
NthPreordernode(root.left, N);
NthPreordernode(root.right, N);
}
}
var 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);
var N = 6;
NthPreordernode(root, N);
</script>
|
Complexity Analysis:
- Time Complexity: O(n), where n is the number of nodes in the given binary tree.
- Auxiliary Space: O(1)