📜  找出斐波那契二叉树第 K 层出现的数字

📅  最后修改于: 2021-09-03 14:33:32             🧑  作者: Mango

给定一个数字K ,任务是打印出现在斐波那契二叉树第 K层的斐波那契数字。
例子:

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

朴素的方法:朴素的方法是构建一个斐波那契二叉树(斐波那契数的二叉树),然后获取特定级别 K 的元素。
但是,这种方法对于大数字已经过时了,因为它需要太多时间。
有效的方法:由于可以通过查找范围[2 K – 1 , 2 K – 1] 中的元素来找到将出现在树的某个任意级别 K 中的元素。所以:

  1. 使用动态规划找到最多 10 6的斐波那契数并将它们存储在一个数组中。
  2. 计算水平的 left_index 和 right_index 为:
    left_index = 2K - 1 
    right_index = 2K - 1
  3. 从斐波那契数组的 left_index 到 right_index 打印斐波那契数列。

下面是上述方法的实现:

C++
// C++ program to print the Fibonacci numbers
// present at K-th level of a Binary Tree
  
#include 
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;
}


Java
// 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


Python3
# 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


C#
// 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


Javascript


输出:
13 21 34 55 89 144 233 377

如果您想与行业专家一起参加直播课程,请参阅Geeks Classes Live