Find the parent of a node in the given binary tree
Given a tree and a node, the task is to find the parent of the given node in the tree. Print -1 if the given node is the root node.
Examples:
Input: Node = 3
1
/ \
2 3
/ \
4 5
Output: 1
Input: Node = 1
1
/ \
2 3
/ \
4 5
/
6
Output: -1
Approach: Write a recursive function that takes the current node and its parent as the arguments (root node is passed with -1 as its parent). If the current node is equal to the required node then print its parent and return else call the function recursively for its children and the current node as the parent.
Below is the implementation of the above approach:
C++
#include <iostream>
using namespace std;
struct Node {
int data;
struct Node *left, *right;
Node( int data)
{
this ->data = data;
left = right = NULL;
}
};
void findParent( struct Node* node,
int val, int parent)
{
if (node == NULL)
return ;
if (node->data == val) {
cout << parent;
}
else {
findParent(node->left, val, node->data);
findParent(node->right, val, node->data);
}
}
int main()
{
struct Node* root = new Node(1);
root->left = new Node(2);
root->right = new Node(3);
root->left->left = new Node(4);
root->left->right = new Node(5);
int node = 3;
findParent(root, node, -1);
return 0;
}
|
Java
class GFG
{
static class Node
{
int data;
Node left, right;
Node( int data)
{
this .data = data;
left = right = null ;
}
};
static void findParent(Node node,
int val, int parent)
{
if (node == null )
return ;
if (node.data == val)
{
System.out.print(parent);
}
else
{
findParent(node.left, val, node.data);
findParent(node.right, val, node.data);
}
}
public static void main(String []args)
{
Node root = new Node( 1 );
root.left = new Node( 2 );
root.right = new Node( 3 );
root.left.left = new Node( 4 );
root.left.right = new Node( 5 );
int node = 3 ;
findParent(root, node, - 1 );
}
}
|
Python3
class Node:
def __init__( self , data):
self .data = data
self .left = None
self .right = None
def findParent(node : Node,
val : int ,
parent : int ) - > None :
if (node is None ):
return
if (node.data = = val):
print (parent)
else :
findParent(node.left,
val, node.data)
findParent(node.right,
val, node.data)
if __name__ = = "__main__" :
root = Node( 1 )
root.left = Node( 2 )
root.right = Node( 3 )
root.left.left = Node( 4 )
root.left.right = Node( 5 )
node = 3
findParent(root, node, - 1 )
|
C#
using System;
class GFG
{
public class Node
{
public int data;
public Node left, right;
public Node( int data)
{
this .data = data;
left = right = null ;
}
};
static void findParent(Node node,
int val, int parent)
{
if (node == null )
return ;
if (node.data == val)
{
Console.Write(parent);
}
else
{
findParent(node.left, val, node.data);
findParent(node.right, val, node.data);
}
}
public static void Main(String []args)
{
Node root = new Node(1);
root.left = new Node(2);
root.right = new Node(3);
root.left.left = new Node(4);
root.left.right = new Node(5);
int node = 3;
findParent(root, node, -1);
}
}
|
Javascript
<script>
class Node
{
constructor(data)
{
this .data = data;
this .left = null ;
this .right = null ;
}
};
function findParent(node, val, parent)
{
if (node == null )
return ;
if (node.data == val)
{
document.write(parent);
}
else
{
findParent(node.left, val, node.data);
findParent(node.right, val, node.data);
}
}
var root = new Node(1);
root.left = new Node(2);
root.right = new Node(3);
root.left.left = new Node(4);
root.left.right = new Node(5);
var node = 3;
findParent(root, node, -1);
</script>
|
Time Complexity: O(N).
Auxiliary Space: O(N).
Last Updated :
13 Aug, 2021
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...