Binary TreesBinary Trees36

  1. 1Preorder Traversal of a Binary Tree using Recursion
  2. 2Preorder Traversal of a Binary Tree using Iteration
  3. 3Postorder Traversal of a Binary Tree Using Recursion
  4. 4Postorder Traversal of a Binary Tree using Iteration
  5. 5Level Order Traversal of a Binary Tree using Recursion
  6. 6Level Order Traversal of a Binary Tree using Iteration
  7. 7Reverse Level Order Traversal of a Binary Tree using Iteration
  8. 8Reverse Level Order Traversal of a Binary Tree using Recursion
  9. 9Find Height of a Binary Tree
  10. 10Find Diameter of a Binary Tree
  11. 11Find Mirror of a Binary Tree - Todo
  12. 12Inorder Traversal of a Binary Tree using Recursion
  13. 13Inorder Traversal of a Binary Tree using Iteration
  14. 14Left View of a Binary Tree
  15. 15Right View of a Binary Tree
  16. 16Top View of a Binary Tree
  17. 17Bottom View of a Binary Tree
  18. 18Zigzag Traversal of a Binary Tree
  19. 19Check if a Binary Tree is Balanced
  20. 20Diagonal Traversal of a Binary Tree
  21. 21Boundary Traversal of a Binary Tree
  22. 22Construct a Binary Tree from a String with Bracket Representation
  23. 23Convert a Binary Tree into a Doubly Linked List
  24. 24Convert a Binary Tree into a Sum Tree
  25. 25Find Minimum Swaps Required to Convert a Binary Tree into a BST
  26. 26Check if a Binary Tree is a Sum Tree
  27. 27Check if All Leaf Nodes are at the Same Level in a Binary Tree
  28. 28Lowest Common Ancestor (LCA) in a Binary Tree
  29. 29Solve the Tree Isomorphism Problem
  30. 30Check if a Binary Tree Contains Duplicate Subtrees of Size 2 or More
  31. 31Check if Two Binary Trees are Mirror Images
  32. 32Calculate the Sum of Nodes on the Longest Path from Root to Leaf in a Binary Tree
  33. 33Print All Paths in a Binary Tree with a Given Sum
  34. 34Find the Distance Between Two Nodes in a Binary Tree
  35. 35Find the kth Ancestor of a Node in a Binary Tree
  36. 36Find All Duplicate Subtrees in a Binary Tree

Find the Nth Root of a Number
Using Binary Search



Problem Statement

Given a number x and a positive integer n, your task is to find the nth root of x. That is, find a real number r such that rn = x.

You should return the value of r up to a certain precision (for example, 6 decimal places).

Examples

Value (x)Root (n)OutputDescription
2733.00000033 = 27, so cube root of 27 is 3
1642.00000024 = 16, so 4th root is 2
1032.154435Cube root of 10 is a real number between 2 and 3
151.0000001 raised to any power is 1
030.0000000 raised to any positive power is 0
717.0000001st root of any number is the number itself
00-1Invalid input: root 0 is not defined
-83-2.000000Valid: cube root of negative number is negative
-82-1Invalid: even root of negative number
-1Empty input is invalid

Solution

To find the nth root of a number x, we can use a method called binary search, which efficiently narrows down the possible answer by halving the search range each time.

Understanding Different Cases

Before applying the binary search, we handle a few special cases:

  • If x = 0: The result is 0, because 0 raised to any positive power is 0.
  • If x = 1: The result is always 1, regardless of the value of n.
  • If n = 1: The answer is simply x itself.
  • If x is negative and n is even: The answer is undefined in real numbers, so we return -1.
  • If x is negative and n is odd: The result exists and will also be negative.
  • If n ≤ 0: The root is undefined or non-standard, so we return -1.

How Binary Search Helps

We know that the nth root of x lies somewhere between 0 and x (or 0 and 1 if x < 1). We set low = 0 and high = max(1, x) and repeatedly do the following:

  • Find the middle point mid.
  • Raise mid to the power n.
  • Compare it with x:
    • If midn < x, we shift our search range to the right (low = mid).
    • If midn > x, we shift the range to the left (high = mid).
    • If it's close enough to x (say, within 1e-6), we consider that our answer.

Why It Works

This approach works well because raising a number to a power is continuous, so the value of midn increases as mid increases. By halving the range at each step, we find the accurate root efficiently with a time complexity of O(log x).

This method avoids brute-force checking or floating-point rounding issues and works even for large numbers or high precision.

Visualization

Algorithm Steps

  1. Set the search range from low = 0 to high = x (or 1, whichever is higher).
  2. Run a binary search with precision (e.g., 1e-6).
  3. At each step, calculate mid and raise it to the power n.
  4. If mid^n is close enough to x, return mid.
  5. If mid^n is less than x, search in the right half.
  6. If mid^n is greater than x, search in the left half.
  7. Repeat until the desired precision is achieved.

Code

Python
Java
JavaScript
C
C++
C#
Kotlin
Swift
Go
Php
def nth_root(x, n):
    if x == 0:
        return 0.0

    low = 0.0
    high = max(1.0, x)
    eps = 1e-6  # Precision threshold

    while (high - low) > eps:
        mid = (low + high) / 2.0
        if mid ** n < x:
            low = mid  # Mid is too small
        else:
            high = mid  # Mid is too big or correct

    return round((low + high) / 2.0, 6)

x = 27
n = 3
print("Nth root is:", nth_root(x, n))

Time Complexity

CaseTime ComplexityExplanation
Best CaseO(1)If the root is a perfect integer like sqrt(1), it returns quickly.
Average CaseO(log x)Each binary search iteration reduces the range of possible values by half.
Average CaseO(log x)Precision-based binary search continues until the result is within the specified error margin.

Space Complexity

O(1)

Explanation: The algorithm uses only a few variables and no extra memory for computation.



Welcome to ProgramGuru

Sign up to start your journey with us

Support ProgramGuru.org

You can support this website with a contribution of your choice.

When making a contribution, mention your name, and programguru.org in the message. Your name shall be displayed in the sponsors list.

PayPal

UPI

PhonePe QR

MALLIKARJUNA M