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

โปรแกรม Python เพื่อจัดเรียงโดยใช้ Binary Search Tree


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

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

ตัวอย่าง

class BinSearchTreeNode:
   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 inorder_traversal(self):
      if self.left is not None:
         self.left.inorder_traversal()
      print(self.key, end=' ')
      if self.right is not None:
         self.right.inorder_traversal()

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

   def inorder_traversal(self):
      if self.root is not None:
         self.root.inorder_traversal()

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

my_instance = BinSearchTree()

my_list = input('Enter the list of numbers... ').split()
my_list = [int(x) for x in my_list]
for x in my_list:
   my_instance.add_val(x)
print('Sorted list: ')
print(my_instance.inorder_traversal())

ผลลัพธ์

Enter the list of numbers... 67 54 89 0 11 34 99
Sorted list:
0 11 34 54 67 89 99

คำอธิบาย

  • คลาส 'BinSearchTreeNode' พร้อมแอตทริบิวต์ที่จำเป็นจะถูกสร้างขึ้น

  • มีฟังก์ชัน 'init' ที่ใช้กำหนดโหนด 'left', 'right' และ 'parent' ให้กับ 'None'

  • มีการกำหนดวิธีการอื่นที่ชื่อว่า "insert_elem" ซึ่งช่วยเพิ่มโหนดให้กับทรี

  • มีการกำหนดวิธีการอื่นที่ชื่อว่า 'inorder_traversal' ซึ่งช่วยดำเนินการข้ามเส้นทางที่ไม่เป็นระเบียบบนทรี

  • มีการกำหนดคลาสอื่นชื่อ 'BinSearchTree'

  • มันตั้งค่ารูทเป็น 'ไม่มี

  • มีเมธอดชื่อ 'inorder_traversal' ที่ช่วยดำเนินการตามคำสั่งบนทรี

  • มีการกำหนดวิธีการอื่นที่ชื่อว่า 'add_val' ซึ่งช่วยเพิ่มโหนดให้กับทรี

  • อินสแตนซ์ของ 'BinSearchTree' ถูกสร้างขึ้น

  • ผู้ใช้ใช้รายการหมายเลข

  • ต้นไม้ถูกสร้างขึ้นโดยใช้สิ่งนี้

  • รายการถูกจัดเรียงและดำเนินการข้ามผ่านแบบไม่เรียงลำดับ

  • เอาต์พุตที่เกี่ยวข้องจะแสดงบนคอนโซล