Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

Kth Smallest Element ใน BST ด้วย Python

หาค่าที่เป็นอันดับ k จากน้อยไปมากใน Binary Search Tree (BST)

คุณสมบัติ BST

Inorder traversal ให้ค่าจากน้อยไปมาก → ตัวที่ k ใน inorder คือคำตอบ

ตัวอย่าง

BST:       10
          /  \
         5    15
        / \   /
       2   7 13

k=3 → 7

วิธีที่ 1: Inorder Traversal เก็บทั้งหมด (O(n) space)

class Solution:
    def kthSmallest(self, root, k):
        def inorder(node):
            if not node:
                return
            inorder(node.left)
            vals.append(node.val)
            inorder(node.right)
        
        vals = []
        inorder(root)
        return vals[k-1]

วิธีที่ 2: Iterative + Early Stop (O(h) space, h=height)

class Solution:
    def kthSmallest(self, root, k):
        stack = []
        while True:
            while root:
                stack.append(root)
                root = root.left
            root = stack.pop()
            k -= 1
            if k == 0:
                return root.val
            root = root.right

สรุป

วิธี iterative ดีกว่า เพราะหยุดได้ทันทีที่เจอ ไม่ต้อง traverse ทั้งต้นไม้