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