สมมติว่าเรามีต้นไม้ค้นหาไบนารี (BST) และจำนวนเต็ม k เราต้องการหาค่าที่เล็กที่สุดลำดับที่ k ในต้นไม้ (1-indexed หรือ 0-indexed ตามการ implement)
ตัวอย่างเช่น หากอินพุตเป็นต้นไม้ BST ดังรูป และ k = 3 ผลลัพธ์จะเป็น 7
ขั้นตอนการแก้ปัญหา (Iterative Inorder Traversal with Stack)
stack = [],i = 0,ans = -1- วนลูป while
stackหรือrootไม่ใช่ null:- วนลูป while
rootไม่ใช่ null:- push
rootเข้า stack root = root.left
- push
v = stack.pop()- หาก
i == kให้ans = v.valและ break root = v.righti += 1
- วนลูป while
- คืนค่า
ans
ตัวอย่างโค้ด Python
class TreeNode:
def __init__(self, value):
self.val = value
self.left = None
self.right = None
class Solution:
def solve(self, root, k):
stack = []
i = 0
ans = -1
while stack or root:
while root:
stack.append(root)
root = root.left
v = stack.pop()
if i == k:
ans = v.val
break
root = v.right
i += 1
return ans
ob = Solution()
root = TreeNode(5)
root.left = TreeNode(4)
root.right = TreeNode(10)
root.right.left = TreeNode(7)
root.right.right = TreeNode(15)
root.right.left.left = TreeNode(6)
root.right.left.right = TreeNode(8)
print(ob.solve(root, 3)) # Output: 7
อินพุต
root = TreeNode(5) root.left = TreeNode(4) root.right = TreeNode(10) root.right.left = TreeNode(7) root.right.right = TreeNode(15) root.right.left.left = TreeNode(6) root.right.left.right = TreeNode(8) 3
เอาต์พุต
7