 Open in App
Not now

# Find parent of given node in a Binary Tree with given postorder traversal

• Difficulty Level : Hard
• Last Updated : 21 Jun, 2022

Given two integers N and K where N denotes the height of a binary tree, the task is to find the parent of the node with value K in a binary tree whose postorder traversal is first natural numbers For N = 3, the Tree will be -

7
/   \
3     6
/   \  /  \
1     2 4   5

Examples:

Input: N = 4, K = 5
Output:
Explanation:
Parent of the node 5 is 6. As shown in the tree above.
Input: N = 5, K = 3
Output:
Explanation:
Parent of the node 3 is 7. As shown in the tree above.

Naive Approach: A simple approach is to build the tree according to the following pattern and then traverse the whole tree to find the parent of a given node.
Efficient Approach: The idea is to use a binary search to find the parent of the node. As we know the binary Tree of Height N has nodes. Therefore, the search space for the binary search will be 1 to Now each node has children value either or Therefore, parents of such nodes can be found easily.
Below is the implementation of the above approach:

## C++

 // C++ implementation to find the// parent of the given node K in// a binary tree whose post-order// traversal is N natural numbers #include using namespace std; // Function to find the parent// of the given nodeint findParent(int height, int node){    int start = 1;    int end = pow(2, height) - 1;     // Condition to check whether    // the given node is a root node.    // if it is then return -1 because    // root node has no parent    if (end == node)        return -1;     // Loop till we found    // the given node    while (node >= 1) {        end = end - 1;         // Finding the middle node of the        // tree because at every level        // tree parent is        // divided into two halves        int mid = start                  + (end - start)                        / 2;         // if the node is found return        // the parent always the child        // nodes of every node        // is node/2 or (node-1)        if (mid == node || end == node) {            return (end + 1);        }         // if the node to be found        // is greater than the mid        // search for left subtree else        // search in right subtree        else if (node < mid) {            end = mid;        }        else {            start = mid;        }    }} // Driver Codeint main(){    int height = 4;    int node = 6;     int k = findParent(height, node);    cout << k;     return 0;}

## Java

 // Java implementation to find the// parent of the given node K in// a binary tree whose post-order// traversal is N natural numbersimport java.util.*;class GFG{ // Function to find the parent// of the given nodestatic int findParent(int height,                      int node){  int start = 1;  int end = (int)Math.pow(2, height) - 1;   // Condition to check whether  // the given node is a root node.  // if it is then return -1 because  // root node has no parent  if (end == node)    return -1;   // Loop till we found  // the given node  while (node >= 1)  {    end = end - 1;     // Finding the middle node of the    // tree because at every level    // tree parent is    // divided into two halves    int mid = start + (end - start) / 2;     // if the node is found return    // the parent always the child    // nodes of every node    // is node*/2 or (node-1)    if (mid == node || end == node)    {      return (end + 1);    }     // if the node to be found    // is greater than the mid    // search for left subtree else    // search in right subtree    else if (node < mid)    {      end = mid;    }    else    {      start = mid;    }  }  return -1;} // Driver Codepublic static void main(String[] args){  int height = 4;  int node = 6;  int k = findParent(height, node);  System.out.print(k);}} // This code is contributed by gauravrajput1

## Python3

 # Python implementation to find the# parent of the given node import math # Function to find the parent# of the given nodedef findParent(height, node):     start = 1    end = pow(2, height) - 1     # Check whether the given node    # is a root node.if it is then    # return -1 because root    # node has no parent    if (end == node):        return -1     # Loop till we found    # the given node    while(node >= 1):         end = end - 1         # Find the middle node of the        # tree because at every level        # tree parent is divided        # into two halves        mid = start + (end - start)//2         # if the node is found        # return the parent        # always the child nodes of every        # node is node / 2 or (node-1)        if(mid == node or end == node):            return (end + 1)                 # if the node to be found is greater        # than the mid search for left        # subtree else search in right subtree        elif (node < mid):            end = mid         else:            start = mid # Driver codeif __name__ == "__main__":    height = 4    node = 6         # Function Call    k = findParent(height, node)    print(k)

## C#

 // C# implementation to find the// parent of the given node K in// a binary tree whose post-order// traversal is N natural numbersusing System;class GFG{ // Function to find the parent// of the given nodestatic int findParent(int height,                      int node){  int start = 1;  int end = (int)Math.Pow(2, height) - 1;   // Condition to check whether  // the given node is a root node.  // if it is then return -1 because  // root node has no parent  if (end == node)    return -1;   // Loop till we found  // the given node  while (node >= 1)  {    end = end - 1;     // Finding the middle node of the    // tree because at every level    // tree parent is    // divided into two halves    int mid = start + (end - start) / 2;     // if the node is found return    // the parent always the child    // nodes of every node    // is node*/2 or (node-1)    if (mid == node || end == node)    {      return (end + 1);    }     // if the node to be found    // is greater than the mid    // search for left subtree else    // search in right subtree    else if (node < mid)    {      end = mid;    }    else    {      start = mid;    }  }  return -1;} // Driver Codepublic static void Main(String[] args){  int height = 4;  int node = 6;  int k = findParent(height, node);  Console.Write(k);}} // This code is contributed by Princi Singh

## Javascript

 

Output:

7

Time complexity: O(log n) where n is no of nodes in binary tree

Auxiliary Space: O(1)

My Personal Notes arrow_drop_up