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