What is Calkin Wilf Sequence?
A Calkin-Wilf tree (or sequence) is a special binary tree which is obtained by starting with the fraction 1/1 and adding a/(a+b) and (a+b)/b iteratively below each fraction a/b. This tree generates every rational number. Writing out the terms in a sequence gives 1/1, 1/2, 2/1, 1/3, 3/2, 2/3, 3/1, 1/4, 4/3, 3/5, 5/2, 2/5, 5/3, 3/4, 4/1, …The sequence has the property that each denominator is the next numerator.
The image above is the Calkin-Wilf Tree where all the rational numbers are listed. The children of a node a/b is calculated as a/(a+b) and (a+b)/b.
The task is to find the nth rational number in breadth first traversal of this tree.
Input : 13 Output : [5, 3] Input : 5 Output : [3, 2]
Explanation: This tree is a Perfect Binary Search tree and we need floor(log(n)) steps to compute nth rational number. The concept is similar to searching in a binary search tree. Given n we keep dividing it by 2 until we get 0. We return fraction at each stage in the following manner:-
if n%2 == 0 update frac+=frac else update frac+=frac
Below is the program to find the nth number in Calkin Wilf sequence:
For n = 13,
- Number of Binary Trees for given Preorder Sequence length
- Minimum number of operations to convert a given sequence into a Geometric Progression
- Recaman's sequence
- Create a sequence whose XOR of elements is y
- String with additive sequence
- Longest sub-sequence with minimum LCM
- Longest sub-sequence with maximum GCD
- Longest sub-sequence with non-negative sum
- Longest sub-sequence with a given OR value : O(N) Approach
- Moser-de Bruijn Sequence
- Baum Sweet Sequence
- Check if the given Prufer sequence is valid or not
- Lexicographically largest sub-sequence of the given string
- Optimal sequence for AVL tree insertion (without any rotations)
- Maximum sum possible for a sub-sequence such that no two elements appear at a distance < K in the array
If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to firstname.lastname@example.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.