Given a tree with the weights of all the nodes, the task is to count the number of nodes whose weight is a Fibonacci number.

**Examples:**

Output:2

Explanation:

Nodes having weights 5 and 8 are fibonacci nodes.

Output:3

Explanation:

Nodes having weights 1, 3 and 8 are fibonacci nodes.

**Approach:** The idea is to perform a dfs on the tree and for every node, check whether the weight is a Fibonacci number or not.

- Generate a hash containing all the Fibonacci numbers using Dynamic programming.
- Using depth-first search traversal, traverse through every node of the tree and check whether the node is a Fibonacci number or not by checking if that element is present in the precomputed hash or not.
- Finally, print the total number of Fibonacci nodes.

Below is the implementation of above approach:

## C++

`// C++ program to count the number of nodes ` `// in the tree whose weight is a ` `// Fibonacci number ` ` ` `#include <bits/stdc++.h> ` `using` `namespace` `std; ` ` ` `const` `int` `sz = 1e5; ` `int` `ans = 0; ` ` ` `vector<` `int` `> graph[100]; ` `vector<` `int` `> weight(100); ` ` ` `// To store all fibonacci numbers ` `set<` `int` `> fib; ` ` ` `// Function to generate fibonacci numbers using ` `// Dynamic Programming and create hash table ` `// to check Fibonacci numbers ` `void` `fibonacci() ` `{ ` ` ` `// Inserting the first two Fibonacci numbers ` ` ` `// in the hash ` ` ` `int` `prev = 0, curr = 1, len = 2; ` ` ` `fib.insert(prev); ` ` ` `fib.insert(curr); ` ` ` ` ` `// Computing the Fibonacci numbers until ` ` ` `// the maximum number and storing them ` ` ` `// in the hash ` ` ` `while` `(len <= sz) { ` ` ` `int` `temp = curr + prev; ` ` ` `fib.insert(temp); ` ` ` `prev = curr; ` ` ` `curr = temp; ` ` ` `len++; ` ` ` `} ` `} ` ` ` `// Function to perform dfs ` `void` `dfs(` `int` `node, ` `int` `parent) ` `{ ` ` ` `// Check if the weight of the node ` ` ` `// is a Fibonacci number or not ` ` ` `if` `(fib.find(weight[node]) != fib.end()) ` ` ` `ans += 1; ` ` ` ` ` `// Performing DFS to iterate the ` ` ` `// remaining nodes ` ` ` `for` `(` `int` `to : graph[node]) { ` ` ` `if` `(to == parent) ` ` ` `continue` `; ` ` ` `dfs(to, node); ` ` ` `} ` `} ` ` ` `// Driver code ` `int` `main() ` `{ ` ` ` `// Weights of the node ` ` ` `weight[1] = 5; ` ` ` `weight[2] = 10; ` ` ` `weight[3] = 11; ` ` ` `weight[4] = 8; ` ` ` `weight[5] = 6; ` ` ` ` ` `// Edges of the tree ` ` ` `graph[1].push_back(2); ` ` ` `graph[2].push_back(3); ` ` ` `graph[2].push_back(4); ` ` ` `graph[1].push_back(5); ` ` ` ` ` `// Generate fibonacci numbers ` ` ` `fibonacci(); ` ` ` ` ` `// Call the dfs function to ` ` ` `// traverse through the tree ` ` ` `dfs(1, 1); ` ` ` ` ` `cout << ans << endl; ` ` ` ` ` `return` `0; ` `} ` |

*chevron_right*

*filter_none*

## Java

*chevron_right*

*filter_none*

## Python3

`# Python 3 program to count the number of nodes ` `# in the tree whose weight is a ` `# Fibonacci number ` `sz ` `=` `1e5` `ans ` `=` `0` ` ` `graph ` `=` `[[] ` `for` `i ` `in` `range` `(` `100` `)] ` `weight ` `=` `[` `0` `for` `i ` `in` `range` `(` `100` `)] ` ` ` `# To store all fibonacci numbers ` `fib ` `=` `set` `() ` ` ` `# Function to generate fibonacci numbers using ` `# Dynamic Programming and create hash table ` `# to check Fibonacci numbers ` `def` `fibonacci(): ` ` ` ` ` `# Inserting the first two Fibonacci numbers ` ` ` `# in the hash ` ` ` `prev ` `=` `0` ` ` `curr ` `=` `1` ` ` `len1 ` `=` `2` ` ` `fib.add(prev) ` ` ` `fib.add(curr) ` ` ` ` ` `# Computing the Fibonacci numbers until ` ` ` `# the maximum number and storing them ` ` ` `# in the hash ` ` ` `while` `(len1 <` `=` `sz): ` ` ` `temp ` `=` `curr ` `+` `prev ` ` ` `fib.add(temp) ` ` ` `prev ` `=` `curr; ` ` ` `curr ` `=` `temp; ` ` ` `len1 ` `+` `=` `1` ` ` `# Function to perform dfs ` `def` `dfs(node, parent): ` ` ` `global` `ans ` ` ` ` ` `# Check if the weight of the node ` ` ` `# is a Fibonacci number or not ` ` ` `if` `(weight[node] ` `in` `fib): ` ` ` `ans ` `+` `=` `1` ` ` ` ` `# Performing DFS to iterate the ` ` ` `# remaining nodes ` ` ` `for` `to ` `in` `graph[node]: ` ` ` `if` `(to ` `=` `=` `parent): ` ` ` `continue` ` ` `dfs(to, node) ` ` ` `# Driver code ` `if` `__name__ ` `=` `=` `'__main__'` `: ` ` ` `# Weights of the node ` ` ` `weight[` `1` `] ` `=` `5` ` ` `weight[` `2` `] ` `=` `10` ` ` `weight[` `3` `] ` `=` `11` ` ` `weight[` `4` `] ` `=` `8` ` ` `weight[` `5` `] ` `=` `6` ` ` ` ` `# Edges of the tree ` ` ` `graph[` `1` `].append(` `2` `) ` ` ` `graph[` `2` `].append(` `3` `) ` ` ` `graph[` `2` `].append(` `4` `) ` ` ` `graph[` `1` `].append(` `5` `) ` ` ` ` ` `# Generate fibonacci numbers ` ` ` `fibonacci() ` ` ` ` ` `# Call the dfs function to ` ` ` `# traverse through the tree ` ` ` `dfs(` `1` `, ` `1` `) ` ` ` ` ` `print` `(ans) ` ` ` `# This code is contributed by Surendra_Gangwar ` |

*chevron_right*

*filter_none*

## C#

`// C# program to count the number of nodes ` `// in the tree whose weight is a ` `// Fibonacci number ` `using` `System; ` `using` `System.Collections.Generic; ` ` ` `public` `class` `GFG{ ` ` ` `static` `int` `sz = (` `int` `) 1e5; ` `static` `int` `ans = 0; ` ` ` `static` `List<` `int` `> []graph = ` `new` `List<` `int` `>[100]; ` `static` `int` `[]weight = ` `new` `int` `[100]; ` ` ` `// To store all fibonacci numbers ` `static` `HashSet<` `int` `> fib = ` `new` `HashSet<` `int` `>(); ` ` ` `// Function to generate fibonacci numbers using ` `// Dynamic Programming and create hash table ` `// to check Fibonacci numbers ` `static` `void` `fibonacci() ` `{ ` ` ` `// Inserting the first two Fibonacci numbers ` ` ` `// in the hash ` ` ` `int` `prev = 0, curr = 1, len = 2; ` ` ` `fib.Add(prev); ` ` ` `fib.Add(curr); ` ` ` ` ` `// Computing the Fibonacci numbers until ` ` ` `// the maximum number and storing them ` ` ` `// in the hash ` ` ` `while` `(len <= sz) { ` ` ` `int` `temp = curr + prev; ` ` ` `fib.Add(temp); ` ` ` `prev = curr; ` ` ` `curr = temp; ` ` ` `len++; ` ` ` `} ` `} ` ` ` `// Function to perform dfs ` `static` `void` `dfs(` `int` `node, ` `int` `parent) ` `{ ` ` ` `// Check if the weight of the node ` ` ` `// is a Fibonacci number or not ` ` ` `if` `(fib.Contains(weight[node])) ` ` ` `ans += 1; ` ` ` ` ` `// Performing DFS to iterate the ` ` ` `// remaining nodes ` ` ` `foreach` `(` `int` `to ` `in` `graph[node]) { ` ` ` `if` `(to == parent) ` ` ` `continue` `; ` ` ` `dfs(to, node); ` ` ` `} ` `} ` ` ` `// Driver code ` `public` `static` `void` `Main(String[] args) ` `{ ` ` ` `for` `(` `int` `i = 0; i < 100; i++) { ` ` ` `graph[i] = ` `new` `List<` `int` `>(); ` ` ` `} ` ` ` ` ` `// Weights of the node ` ` ` `weight[1] = 5; ` ` ` `weight[2] = 10; ` ` ` `weight[3] = 11; ` ` ` `weight[4] = 8; ` ` ` `weight[5] = 6; ` ` ` ` ` `// Edges of the tree ` ` ` `graph[1].Add(2); ` ` ` `graph[2].Add(3); ` ` ` `graph[2].Add(4); ` ` ` `graph[1].Add(5); ` ` ` ` ` `// Generate fibonacci numbers ` ` ` `fibonacci(); ` ` ` ` ` `// Call the dfs function to ` ` ` `// traverse through the tree ` ` ` `dfs(1, 1); ` ` ` ` ` `Console.Write(ans +` `"\n"` `); ` ` ` `} ` `} ` `// This code contributed by Rajput-Ji ` |

*chevron_right*

*filter_none*

**Output:**

2

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the **DSA Self Paced Course** at a student-friendly price and become industry ready.

## Recommended Posts:

- Count the nodes in the given tree whose weight is a powerful number
- Count the nodes in the given Tree whose weight is a Perfect Number
- Count of all prime weight nodes between given nodes in the given Tree
- Count the nodes in the given tree whose weight is even
- Count the nodes in the given tree whose weight is even parity
- Count the nodes of the given tree whose weight has X as a factor
- Count the nodes in the given tree whose weight is prime
- Count the nodes in the given tree whose weight is a power of two
- Count the nodes in the given tree whose sum of digits of weight is odd
- Count of Nodes which has Prime Digit sum weight in a Tree
- Count the nodes whose sum with X is a Fibonacci number
- Count number of paths whose weight is exactly X and has at-least one edge of weight M
- Query to find the maximum and minimum weight between two nodes in the given tree using LCA.
- Count the nodes whose weight is a perfect square
- Count the number of nodes at given level in a tree using BFS.
- Count the number of nodes at a given level in a tree using DFS
- Given a n-ary tree, count number of nodes which have more number of children than parents
- Count the number of visible nodes in Binary Tree
- Count the nodes of the tree which make a pangram when concatenated with the sub-tree nodes
- Number of Paths of Weight W in a K-ary tree

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.