Giả sử chúng ta có một giá trị k và một cây tìm kiếm nhị phân, nơi mỗi nút hoặc là nút lá hoặc chứa đúng 2 nút con. Chúng ta cần tìm nút chứa giá trị k và trả về giá trị của nút anh em của nó.
Ví dụ, nếu đầu vào như sau:

k = 4, thì đầu ra sẽ là 10.
Quy trình giải quyết
- Định nghĩa hàm
util()nhận tham sốroot,k,ans. - Nếu cả nút con trái và phải của
rootđều không phải null, thì trả về. - Nếu
k > root.val:- Nếu
root.right.val == k, thêmroot.left.valvàoansvà trả về. - Ngược lại, gọi đệ quy
util(root.right, k, ans).
- Nếu
- Nếu
k < root.val:- Nếu
root.left.val == k, thêmroot.right.valvàoansvà trả về. - Ngược lại, gọi đệ quy
util(root.left, k, ans).
- Nếu
- Từ phương thức chính:
- Khởi tạo
anslà danh sách rỗng. - Gọi
util(root, k, ans). - Trả về
ans[0].
- Khởi tạo
Ví dụ mã nguồn
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]
# Test
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)) # Output: 10
Đầu vào
root = TreeNode(6) root.left = TreeNode(4) root.right = TreeNode(10) root.left.left = TreeNode(3) root.left.right = TreeNode(5) 4
Đầu ra
10