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

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


เมื่อจำเป็นต้องค้นหาองค์ประกอบที่เล็กที่สุดและใหญ่ที่สุดในแผนผังการค้นหาแบบไบนารี คลาสต้นไม้ไบนารีจะถูกสร้างขึ้น และวิธีการเพิ่มองค์ประกอบลงในทรี การค้นหาโหนดเฉพาะจะถูกกำหนด มีการสร้างอินสแตนซ์ของคลาสและใช้กับเมธอดเหล่านี้

ด้านล่างนี้เป็นการสาธิตสิ่งเดียวกัน -

ตัวอย่าง

class BST_Node:
   def __init__(self, key):
      self.key = key
      self.left = None
      self.right = None
      self.parent = None

   def insert_elem(self, node):
      if self.key > node.key:
         if self.left is None:
            self.left = node
            node.parent = self
         else:
            self.left.insert_elem(node)
      elif self.key < node.key:
         if self.right is None:
            self.right = node
            node.parent = self
         else:
            self.right.insert_elem(node)

   def search_node(self, key):
      if self.key > key:
         if self.left is not None:
            return self.left.search_node(key)
         else:
            return None
      elif self.key < key:
         if self.right is not None:
            return self.right.search_node(key)
         else:
            return None
      return self

class BSTree:
   def __init__(self):
      self.root = None

   def add_elem(self, key):
      new_node = BST_Node(key)
      if self.root is None:
         self.root = new_node
      else:
         self.root.insert_elem(new_node)

   def search_node(self, key):
      if self.root is not None:
         return self.root.search_node(key)

   def get_smallest_elem(self):
      if self.root is not None:
         current = self.root
         while current.left is not None:
            current = current.left
         return current.key

   def get_largest_elem(self):
      if self.root is not None:
         current = self.root
         while current.right is not None:
            current = current.right
         return current.key

my_instance = BSTree()

print('Menu (Assume no duplicate keys)')
print('add ')
print('smallest')
print('largest')
print('quit')

while True:
   my_input = input('What operation would you perform ? ').split()

   operation = my_input[0].strip().lower()
   if operation == 'add':
      key = int(my_input[1])
      my_instance.add_elem(key)
   if operation == 'smallest':
      smallest = my_instance.get_smallest_elem()
      print('The smallest element is : {}'.format(smallest))
   if operation == 'largest':
      largest = my_instance.get_largest_elem()
      print('The largest element is : {}'.format(largest))
   elif operation == 'quit':
      break

ผลลัพธ์

Menu (Assume no duplicate keys)
add <key>
smallest
largest
quit
What operation would you perform ? add 5
What operation would you perform ? add 8
What operation would you perform ? add 11
What operation would you perform ? add 0
What operation would you perform ? add 3
What operation would you perform ? smallest
The smallest element is : 0
What operation would you perform ? largest
The largest element is : 11
What operation would you perform ? quit’

คำอธิบาย

  • สร้างคลาส "BST_Node" พร้อมแอตทริบิวต์ที่จำเป็นแล้ว

  • มีฟังก์ชัน 'init' ที่ใช้ตั้งค่าโหนดซ้าย ขวา และโหนดหลักเป็น 'ไม่มี'

  • มีวิธีการ "insert_element" ที่ช่วยแทรกองค์ประกอบลงในไบนารีทรี

  • อีกวิธีหนึ่งชื่อ 'search_node' ซึ่งค้นหาโหนดเฉพาะในทรี

  • มีการกำหนดคลาสอื่นชื่อ 'BSTree' โดยที่รูทถูกตั้งค่าเป็น 'ไม่มี'

  • มีการกำหนดเมธอดชื่อ 'add_elem' ที่เพิ่มองค์ประกอบให้กับทรี

  • มีอีกวิธีหนึ่งชื่อ 'search_node' ที่ช่วยค้นหาโหนดเฉพาะในทรี

  • มีการกำหนดวิธีการอื่นที่เรียกว่า 'get_smallest_node' ที่ช่วยดึงโหนดที่เล็กที่สุดในทรี

  • มีการกำหนดวิธีการอื่นที่เรียกว่า 'get_largest_node' ที่ช่วยดึงโหนดที่ใหญ่ที่สุดในทรี

  • วัตถุของคลาส 'BSTree' ถูกสร้างขึ้น

  • ขึ้นอยู่กับการดำเนินการที่ผู้ใช้เลือก การดำเนินการจะดำเนินการ