Find the numbers present at Kth level of a Fibonacci Binary Tree

Given a number K, the task is to print the fibonacci numbers present at Kth level of a Fibonacci Binary Tree.

Examples:

Input: K = 3
Output: 2, 3, 5, 8
Explanation:
Fibonacci Binary Tree for 3 levels:
        0
       / \
      1   1
     /\  / \
    2  3 5  8
Numbers present at level 3: 2, 3, 5, 8

Input: K = 2
Output: 1, 1
Explanation:
Fibonacci Binary Tree for 2 levels:
        0
       / \
      1   1
Numbers present at level 2: 1, 1

Naive Approach: The naive approach is to build a Fibonacci Binary Tree (binary tree of Fibonacci numbers) and then get elements at a particular level K.
However, this approach is obsolete for large numbers as it takes too much time.

Efficient approach: Since the elements which would be present at some arbitrary level K of the tree can be found by finding the elements in the range [2K – 1, 2K – 1]. Therefore:

  1. Find the Fibonacci numbers up to 106 using Dynamic Programming and store them in an array.
  2. Calculate the left_index and right_index of the level as:
    left_index = 2K - 1 
    right_index = 2K - 1
    
  3. Print the fibonacci numbers from left_index to right_index of fibonacci array.

Below is the implementation of the above approach:

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ program to print the Fibonacci numbers
// present at K-th level of a Binary Tree
  
#include <bits/stdc++.h>
using namespace std;
  
// Initializing the max value
#define MAX_SIZE 100005
  
// Array to store all the
// fibonacci numbers
int fib[MAX_SIZE + 1];
  
// Function to generate fibonacci numbers
// using Dynamic Programming
void fibonacci()
{
    int i;
  
    // 0th and 1st number of the series
    // are 0 and 1
    fib[0] = 0;
    fib[1] = 1;
  
    for (i = 2; i <= MAX_SIZE; i++) {
  
        // Add the previous two numbers in the
        // series and store it
        fib[i] = fib[i - 1] + fib[i - 2];
    }
}
  
// Function to print the Fibonacci numbers
// present at Kth level of a Binary Tree
void printLevel(int level)
{
    // Finding the left and right index
    int left_index = pow(2, level - 1);
    int right_index = pow(2, level) - 1;
  
    // Iterating and printing the numbers
    for (int i = left_index;
         i <= right_index; i++) {
  
        cout << fib[i - 1] << " ";
    }
    cout << endl;
}
  
// Driver code
int main()
{
    // Precomputing Fibonacci numbers
    fibonacci();
  
    int K = 4;
    printLevel(K);
  
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java program to print the Fibonacci numbers
// present at K-th level of a Binary Tree
import java.util.*;
  
class GFG{
   
// Initializing the max value
static final int MAX_SIZE = 100005;
   
// Array to store all the
// fibonacci numbers
static int []fib = new int[MAX_SIZE + 1];
   
// Function to generate fibonacci numbers
// using Dynamic Programming
static void fibonacci()
{
    int i;
   
    // 0th and 1st number of the series
    // are 0 and 1
    fib[0] = 0;
    fib[1] = 1;
   
    for (i = 2; i <= MAX_SIZE; i++) {
   
        // Add the previous two numbers in the
        // series and store it
        fib[i] = fib[i - 1] + fib[i - 2];
    }
}
   
// Function to print the Fibonacci numbers
// present at Kth level of a Binary Tree
static void printLevel(int level)
{
    // Finding the left and right index
    int left_index = (int) Math.pow(2, level - 1);
    int right_index = (int) (Math.pow(2, level) - 1);
   
    // Iterating and printing the numbers
    for (int i = left_index;
         i <= right_index; i++) {
   
        System.out.print(fib[i - 1]+ " ");
    }
    System.out.println();
}
   
// Driver code
public static void main(String[] args)
{
    // Precomputing Fibonacci numbers
    fibonacci();
   
    int K = 4;
    printLevel(K);
}
}
  
// This code is contributed by Rajput-Ji

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python program to print the Fibonacci numbers
# present at K-th level of a Binary Tree
  
# Initializing the max value
MAX_SIZE = 100005
  
# Array to store all the
# fibonacci numbers
fib =[0]*(MAX_SIZE + 1)
  
# Function to generate fibonacci numbers
# using Dynamic Programming
def fibonacci():
      
    # 0th and 1st number of the series
    # are 0 and 1
    fib[0] = 0
    fib[1] = 1
      
    for i in range(2, MAX_SIZE + 1):
          
        # Add the previous two numbers in the
        # series and store it
        fib[i] = fib[i - 1] + fib[i - 2]
          
# Function to print the Fibonacci numbers
# present at Kth level of a Binary Tree
def printLevel(level):
      
    # Finding the left and right index
    left_index = pow(2, level - 1)
    right_index = pow(2, level) - 1
      
    # Iterating and printing the numbers
    for i in range(left_index, right_index+1):
        print(fib[i - 1],end=" ")
          
    print()
  
# Driver code
  
# Precomputing Fibonacci numbers
fibonacci()
  
K = 4
printLevel(K)
  
# This code is contributed by shivanisinghss2110

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program to print the Fibonacci numbers 
// present at K-th level of a Binary Tree 
using System;
  
class GFG{ 
      
    // Initializing the max value 
    static int MAX_SIZE = 100005; 
      
    // Array to store all the 
    // fibonacci numbers 
    static int []fib = new int[MAX_SIZE + 1]; 
      
    // Function to generate fibonacci numbers 
    // using Dynamic Programming 
    static void fibonacci() 
    
        int i; 
      
        // 0th and 1st number of the series 
        // are 0 and 1 
        fib[0] = 0; 
        fib[1] = 1; 
      
        for (i = 2; i <= MAX_SIZE; i++) { 
      
            // Add the previous two numbers in the 
            // series and store it 
            fib[i] = fib[i - 1] + fib[i - 2]; 
        
    
      
    // Function to print the Fibonacci numbers 
    // present at Kth level of a Binary Tree 
    static void printLevel(int level) 
    
        // Finding the left and right index 
        int left_index = (int) Math.Pow(2, level - 1); 
        int right_index = (int) (Math.Pow(2, level) - 1); 
      
        // Iterating and printing the numbers 
        for (int i = left_index; 
            i <= right_index; i++) { 
      
            Console.Write(fib[i - 1]+ " "); 
        
            Console.WriteLine(); 
    
      
    // Driver code 
    public static void Main(string[] args) 
    
        // Precomputing Fibonacci numbers 
        fibonacci(); 
      
        int K = 4; 
        printLevel(K); 
    
  
// This code is contributed by Yash_R

chevron_right


Output:

13 21 34 55 89 144 233 377

Don’t stop now and take your learning to the next level. Learn all the important concepts of Data Structures and Algorithms with the help of the most trusted course: DSA Self Paced. Become industry ready at a student-friendly price.




My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.