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

โปรแกรมค้นหาองค์ประกอบที่เล็กที่สุดที่ k ใน Binary Search Tree ใน Python


สมมติว่าเรามีแผนผังการค้นหาแบบไบนารี และจำนวนเต็ม k อีกอัน เราต้องหาค่าที่น้อยที่สุดที่ k ในแผนผัง

ดังนั้นหากอินพุตเป็นแบบ

โปรแกรมค้นหาองค์ประกอบที่เล็กที่สุดที่ k ใน Binary Search Tree ใน Python

k =3 แล้วผลลัพธ์จะเป็น 7

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • stack :=stack เปล่า

  • ผม :=0

  • ตอบ :=-1

  • ในขณะที่สแต็กไม่ว่างหรือรูทไม่ว่างให้ทำ

    • ในขณะที่รูทไม่เป็นโมฆะให้ทำ

      • ดันรูทลงในสแต็ก

      • root :=เหลือรูท

    • v :=องค์ประกอบป๊อปจากสแต็ก

    • ถ้าฉันเหมือนกับ k แล้ว

      • ans :=ค่าของ v

      • ออกจากวง

    • root :=ด้านขวาของ v

    • ผม :=ผม + 1

  • กลับมาอีกครั้ง

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

ตัวอย่าง

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))

อินพุต

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