สมมติว่าเรามีค่า k และแผนผังการค้นหาแบบไบนารี แต่ละโหนดเป็นใบไม้หรือมีลูก 2 ลูก เราต้องหาโหนดที่มีค่า k แล้วคืนค่าของพี่น้อง
ดังนั้นหากอินพุตเป็นแบบ
k =4 แล้วผลลัพธ์จะเป็น 10
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
กำหนดฟังก์ชัน util() สิ่งนี้จะทำการรูท, k, ans
-
ถ้าทางซ้ายของรูทไม่เป็นโมฆะ และทางขวาของรูทไม่เป็นโมฆะ
-
กลับ
-
-
ถ้า k> ค่าของรูทแล้ว
-
ถ้าค่าของรูทเท่ากับ k แล้ว
-
แทรกค่าของรูทด้านซ้ายที่ส่วนท้ายของ ans
-
กลับ
-
-
มิฉะนั้น
-
util(ทางขวาของรูท, k, ans)
-
-
-
ถ้า k <ค่าของรูท แล้ว
-
ถ้าค่าของรูทเท่ากับ k แล้ว
-
ใส่ค่าของรูททางขวาที่ท้าย ans
-
กลับ
-
-
มิฉะนั้น
-
util(ด้านซ้ายของ root, k, ans)
-
-
-
จากวิธีหลัก ให้ทำดังนี้ −
-
ans :=รายการใหม่
-
util(root, k, ans)
-
ส่งคืน[0]
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
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))
อินพุต
root = TreeNode(6) root.left = TreeNode(4) root.right = TreeNode(10) root.left.left = TreeNode(3) root.left.right = TreeNode(5) 4
ผลลัพธ์
10