Given an integer N, the task is to find the path from the Nth node to the root of a Binary Tree of the following form:
- The Binary Tree is a Complete Binary Tree up to the level of the Nth node.
- The nodes are numbered 1 to N, starting from the root as 1.
- The structure of the Tree is as follows:Â
Â1 / \ 2 3 / \ / \ 4 5 6 7 ................ / \ ............ N - 1 N ............
Examples:
Input: N = 7
Output: 7 3 1
Explanation: The path from the node 7 to root is 7 -> 3 -> 1.Input: N = 11
Output: 11 5 2 1
Explanation: The path from node 11 to root is 11 -> 5 -> 2 -> 1.
Naive Approach: The simplest approach to solve the problem is to perform DFS from the given node until the root node is encountered and print the path.
Time Complexity: O(N)
Auxiliary Space: O(1)
Efficient Approach: The above approach can be optimized based on the structure of the given Binary Tree. It can be observed that for every N, its parent node will be N / 2. Therefore, repeatedly print the current value of N and update N to N / 2 until N is equal to 1, i.e. root node is reached.Â
Below is the implementation of the above approach:
C++
// C++ program for the above approachÂ
#include <iostream>using namespace std;Â
// Function to print the path// from node to rootvoid path_to_root(int node){    // Iterate until root is reached    while (node >= 1) {Â
        // Print the value of        // the current node        cout << node << ' ';Â
        // Move to parent of        // the current node        node /= 2;    }}Â
// Driver Codeint main(){Â Â Â Â int N = 7;Â Â Â Â path_to_root(N);Â
    return 0;} |
Java
// Java program for the above approachimport java.util.*;Â Â class GFG{Â
// Function to print the path// from node to rootstatic void path_to_root(int node){         // Iterate until root is reached    while (node >= 1)     {                 // Print the value of        // the current node        System.out.print(node + " ");Â
        // Move to parent of        // the current node        node /= 2;    }}Â
// Driver Codepublic static void main(String[] args){Â Â Â Â int N = 7;Â Â Â Â Â Â Â Â Â path_to_root(N);}}Â
// This code is contributed by shivanisinghss2110 |
Python3
# Python3 program for the above approachÂ
# Function to print the path# from node to rootdef path_to_root(node):         # Iterate until root is reached    while (node >= 1):Â
        # Print the value of        # the current node        print(node, end = " ")Â
        # Move to parent of        # the current node        node //= 2Â
# Driver Codeif __name__ == '__main__':Â
    N = 7Â
    path_to_root(N)Â
# This code is contributed by mohit kumar 29 |
C#
// C# program for the above approachusing System;class GFG{Â
// Function to print the path// from node to rootstatic void path_to_root(int node){         // Iterate until root is reached    while (node >= 1)     {                 // Print the value of        // the current node        Console.Write(node + " ");Â
        // Move to parent of        // the current node        node /= 2;    }}Â
// Driver Codepublic static void Main(String[] args){Â Â Â Â int N = 7;Â Â Â Â Â Â Â path_to_root(N);}}Â
// This code is contributed by shivanisinghss2110 |
Javascript
<script>Â
// Javascript program for the above approachÂ
// Function to print the path// from node to rootfunction path_to_root(node){         // Iterate until root is reached    while (node >= 1)     {                 // Print the value of        // the current node        document.write(node + " ");Â
        // Move to parent of        // the current node        node = parseInt(node / 2, 10);    }}Â
// Driver codelet N = 7;Â
path_to_root(N);Â
// This code is contributed by divyeshrabadiya07Â
</script> |
7 3 1
Â
Time Complexity: O(log2(N))
Auxiliary Space: O(1)
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!
