- Trending Categories
- Data Structure
- Networking
- RDBMS
- Operating System
- Java
- iOS
- HTML
- CSS
- Android
- Python
- C Programming
- C++
- C#
- MongoDB
- MySQL
- Javascript
- PHP

- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who

Given a binary tree with weights of its nodes as numbers. The goal is to find the number of nodes that have weights such that the number is a Fibonacci number. Numbers in Fibonacci series are: 0, 1, 1, 2, 3, 5, 8, 13….nth number is the sum of (n−1)th and (n−2)th. If weight is 13 then it is a Fibonacci number so the node will be counted.

**For Example**

temp =1. The tree which will be created after inputting the values is given below −

Count the nodes whose sum with X is a Fibonacci number are: 3

we are given with the tree nodes and the weights associated with each node. Now we check whether the temp+weight is a Fibonacci number or not.

Node | Weight | Weight+temp=fibonacci | Yes/No |
---|---|---|---|

2 | 12 | 12+1=13 | yes |

1 | 7 | 7+1=8 | yes |

4 | 3 | 3+1=4 | no |

3 | 4 | 4+1=5 | yes |

8 | 19 | 19+1=20 | no |

9 | 32 | 32+1=33 | no |

temp = 3. The tree which will be created after inputting the values is given below −

Count the nodes whose sum with X is a Fibonacci number are: 3

we are given with the tree nodes and the weights associated with each node. Now we check whether the temp+weight is a Fibonacci number or not.

Node | Weight | Weight+temp=fibonacci | Yes/No |
---|---|---|---|

5 | 23 | 23+3=26 | no |

2 | 125 | 125+3=128 | no |

6 | 671 | 671+3=674 | no |

4 | 212 | 212+3=215 | no |

5 | 7171 | 7171+3=7174 | no |

3 | 998 | 998+3=1001 | no |

**Approach used in the below program is as follows** −

In this approach we will apply DFS on the graph of the tree to traverse it and check if the weights of the node and temp add upto a fibonacci number. Take two vectors Node_Weight(100) and edge_graph[100] for this purpose.

Initialize Node_Weight[] with the weights of nodes.

Create a tree using vector edge_graph.

Take a global variable Fibonacci and initialize it with 0. Take other global variable temp.

Function check_square(long double val) takes an integer and returns true if val is a perfect square.

Take val_1 = sqrt(val)

Now if(val_1 − floor(val_1) == 0) returns true then total is a perfect square, return true.

Return false otherwise.

Function check_Fibonacci(int num) takes a number and returns true if it is a fibonacci number.

Initialize fib with 5*num*num.

If check_square((fib + 4)) || check_square((fib − 4)) results true then return true.

Return false otherwise.

Function Fibonacci_number(int node, int root) returns count of nodes whose sum with X is a Fibonacci number.

If if(check_Fibonacci(Node_Weight[node] + temp)) returns true then increment Fibonacci.

Traverse tree in vector edge_graph[node] using for loop.

Call Fibonacci_number(it, node) for the next node in the vector.

At the end of all functions we will have a Fibonacci as the number of nodes with weights having sum with temp as a fibonacci number.

#include <bits/stdc++.h> using namespace std; vector<int> Node_Weight(100); vector<int> edge_graph[100]; int Fibonacci = 0, temp; bool check_square(long double val){ long double val_1 = sqrt(val); if(val_1 − floor(val_1) == 0){ return true; } return false; } bool check_Fibonacci(int num){ int fib = 5 * num * num; if(check_square((fib + 4)) || check_square((fib − 4))){ return true; } return false; } void Fibonacci_number(int node, int root){ if(check_Fibonacci(Node_Weight[node] + temp)){ Fibonacci++; } for (int it : edge_graph[node]){ if(it == root){ continue; } Fibonacci_number(it, node); } } int main(){ //weight of the nodes Node_Weight[2] = 6; Node_Weight[1] = 4; Node_Weight[4] = 23; Node_Weight[3] = 5; Node_Weight[8] = 161; Node_Weight[9] = 434; //create graph edge edge_graph[2].push_back(1); edge_graph[2].push_back(4); edge_graph[4].push_back(3); edge_graph[4].push_back(8); edge_graph[8].push_back(9); temp = 3; Fibonacci_number(2, 2); cout<<"Count the nodes whose sum with X is a Fibonacci number are: "<<Fibonacci; return 0; }

If we run the above code it will generate the following output −

Count the nodes whose sum with X is a Fibonacci number are: 1

- Related Questions & Answers
- Count numbers whose sum with x is equal to XOR with x in C++
- Find the Minimum Number of Fibonacci Numbers Whose Sum Is K in C++
- Count the nodes whose weight is a perfect square in C++
- Find a Number X whose sum with its digits is equal to N in C++
- Count pairs in a sorted array whose sum is less than x in C++
- Count smaller values whose XOR with x is greater than x in C++
- Count the nodes in the given tree whose sum of digits of weight is odd in C++
- Count pairs in a binary tree whose sum is equal to a given value x in C++
- Count all pairs of adjacent nodes whose XOR is an odd number in C++
- Count pairs from two BSTs whose sum is equal to a given value x in C++
- Count quadruples from four sorted arrays whose sum is equal to a given value x in C++
- Count pairs from two sorted arrays whose sum is equal to a given value x in C++
- Count the nodes in the given tree whose weight is a power of two in C++
- Program to count number of consecutive lists whose sum is n in C++
- Count triplets in a sorted doubly linked list whose sum is equal to a given value x in C++

Advertisements