Python - ต้นไม้ไบนารี
ต้นไม้แสดงถึงโหนดที่เชื่อมต่อกันด้วยขอบ เป็นโครงสร้างข้อมูลที่ไม่ใช่เชิงเส้น มีคุณสมบัติดังต่อไปนี้
- โหนดหนึ่งถูกทำเครื่องหมายเป็นโหนดรูท
- ทุกโหนดอื่นที่ไม่ใช่รูทเชื่อมโยงกับโหนดหลัก
- แต่ละโหนดสามารถมีจำนวนโหนด chid ได้
เราสร้างโครงสร้างข้อมูลแบบทรีใน python โดยใช้โหนดระบบปฏิบัติการแนวคิดที่กล่าวถึงก่อนหน้านี้ เรากำหนดโหนดหนึ่งโหนดเป็นโหนดรูทจากนั้นเพิ่มโหนดอื่น ๆ เป็นโหนดลูก ด้านล่างนี้คือโปรแกรมสำหรับสร้างโหนดรูท
สร้างรูท
เราเพียงแค่สร้างคลาส Node และเพิ่มกำหนดค่าให้กับโหนด สิ่งนี้จะกลายเป็นทรีที่มีโหนดรูทเท่านั้น
class Node:
def __init__(self, data):
self.left = None
self.right = None
self.data = data
def PrintTree(self):
print(self.data)
root = Node(10)
root.PrintTree()
เมื่อดำเนินการโค้ดด้านบนจะให้ผลลัพธ์ดังนี้ -
10
แทรกเข้าไปในต้นไม้
ในการแทรกลงในต้นไม้เราใช้คลาสโหนดเดียวกันที่สร้างไว้ด้านบนและเพิ่มวิธีการแทรกเข้าไปวิธีการแทรกจะเปรียบเทียบค่าของโหนดกับโหนดแม่และตัดสินใจที่จะเพิ่มเป็นโหนดซ้ายหรือโหนดขวา ในที่สุดก็ใช้วิธี PrintTree ในการพิมพ์ต้นไม้
class Node:
def __init__(self, data):
self.left = None
self.right = None
self.data = data
def insert(self, data):
# Compare the new value with the parent node
if self.data:
if data < self.data:
if self.left is None:
self.left = Node(data)
else:
self.left.insert(data)
elif data > self.data:
if self.right is None:
self.right = Node(data)
else:
self.right.insert(data)
else:
self.data = data
# Print the tree
def PrintTree(self):
if self.left:
self.left.PrintTree()
print( self.data),
if self.right:
self.right.PrintTree()
# Use the insert method to add nodes
root = Node(12)
root.insert(6)
root.insert(14)
root.insert(3)
root.PrintTree()
เมื่อดำเนินการโค้ดด้านบนจะให้ผลลัพธ์ดังนี้ -
3 6 12 14
ข้ามต้นไม้
ต้นไม้สามารถข้ามผ่านได้โดยการตัดสินใจเลือกลำดับเพื่อเยี่ยมชมแต่ละโหนด อย่างที่เห็นได้ชัดว่าเราสามารถเริ่มต้นที่โหนดจากนั้นไปที่แผนผังย่อยด้านซ้ายก่อนและแผนผังย่อยด้านขวาถัดไป หรือเราสามารถไปที่แผนผังย่อยด้านขวาก่อนและด้านซ้ายย่อยถัดไป ดังนั้นจึงมีชื่อที่แตกต่างกันสำหรับวิธีการข้ามต้นไม้เหล่านี้ เราศึกษารายละเอียดเหล่านี้ในบทการใช้อัลกอริทึมการสำรวจต้นไม้ที่นี่ Tree Traversal Algorithms