Suppose we have a value k and a binary search tree, here each node is either a leaf or contains 2 children. We have to find the node containing the value k, and return its sibling's value.
So, if the input is like
k = 4., then the output will be 10.
To solve this, we will follow these steps −
Define a function util() . This will take root, k, ans
if left of root is not null and right of root is not null, then
return
if k > value of root, then
if value of right of root is same as k, then
insert value of left of root at the end of ans
return
otherwise,
util(right of root, k, ans)
if k < value of root, then
if value of right of root is same as k, then
insert value of right of root at the end of ans
return
otherwise,
util(left of root, k, ans)
From the main method, do the following −
ans := a new list
util(root, k, ans)
return ans[0]
Let us see the following implementation to get better understanding −
Example
class TreeNode: def __init__(self, data, left = None, right = None): self.val = data self.left = left self.right = right def util(root, k, ans): if root.left is None and root.right is None: return if k > root.val: if root.right.val == k: ans.append(root.left.val) return else: util(root.right, k, ans) if k < root.val: if root.left.val == k: ans.append(root.right.val) return else: util(root.left, k, ans) class Solution: def solve(self, root, k): ans = [] util(root, k, ans) return ans[0] root = TreeNode(6) root.left = TreeNode(4) root.right = TreeNode(10) root.left.left = TreeNode(3) root.left.right = TreeNode(5) ob1 = Solution() print(ob1.solve(root, 4))
Input
root = TreeNode(6) root.left = TreeNode(4) root.right = TreeNode(10) root.left.left = TreeNode(3) root.left.right = TreeNode(5) 4
Output
10