ในไบนารีทรี แต่ละโหนดมีลูกสองคน นั่นคือลูกด้านซ้ายและลูกด้านขวา สมมติว่าเรามีไบนารีทรีและเราต้องตรวจสอบว่าต้นไม้นั้นสมดุลหรือไม่ ต้นไม้ไบนารีกล่าวกันว่ามีความสมดุลหากความแตกต่างของความสูงของต้นไม้ย่อยด้านซ้ายและต้นไม้ย่อยด้านขวามีค่าน้อยกว่าหรือเท่ากับ '1'
ตัวอย่าง
อินพุต-1:
ผลลัพธ์:
True
คำอธิบาย:
ต้นไม้ไบนารีที่กำหนดคือ [1,2,3, NULL, NULL, 6, 7] ความแตกต่างของความสูงของทรีย่อยด้านซ้ายและแผนผังย่อยด้านขวาจะเท่ากับ '1' ดังนั้นจึงเป็นต้นไม้ที่มีความสูงสมดุล
อินพุต-2:
ผลลัพธ์:
False
คำอธิบาย:
ต้นไม้ไบนารีที่กำหนดคือ [1,2,3,4, NULL, NULL,NULL,5] ความแตกต่างของความสูงของทรีย่อยด้านซ้ายและทรีย่อยด้านขวามีค่ามากกว่า '1' ดังนั้นจึงไม่ใช่ต้นไม้ที่มีความสูงสมดุล
แนวทางในการแก้ปัญหานี้
วิธีการแบบเรียกซ้ำในการแก้ปัญหานี้คือการค้นหาความสูงของทรีย่อยด้านซ้ายและแผนผังย่อยด้านขวา จากนั้นตรวจสอบว่า (height(leftsubstree) - height(rightsubtree) <=1) และคืนค่า True หรือ False ตามนั้น จากนั้น เราจะตรวจสอบแบบเรียกซ้ำสำหรับแต่ละโหนดของไบนารีทรี
- รับอินพุตของโหนดของไบนารีทรี
- กำหนดฟังก์ชันเพื่อค้นหาความสูงของต้นไม้
- ฟังก์ชันบูลีนสำหรับตรวจสอบแบบเรียกซ้ำว่าส่วนสูงของทรีย่อยด้านซ้ายและทรีย่อยด้านขวาต่างกันไม่เกิน '1' หรือไม่ ให้คืนค่า True
- ส่งคืนผลลัพธ์
ตัวอย่าง
class treenode: def __init__(self, data): self.data = data self.left = self.right = None # funtion to find the height of the left subtree and right subtree class height: def __init__(self): self.height = 0 # function to check if the tree is balanced or not def isBalanced(root): lh = height() rh = height() if root is None: return True return ( (abs(lh.height - rh.height) <= 1) and isBalanced(root.left) and isBalanced(root.right) ) root = treenode(1) root.left = treenode(2) root.right = treenode(3) root.left.left = None root.left.right = None root.right.left = treenode(6) root.right.right = treenode(7) if isBalanced(root): print("Balanced") else: print("Not Balanced")
การเรียกใช้โค้ดด้านบนจะสร้างผลลัพธ์เป็น
ผลลัพธ์
Balanced
ต้นไม้ไบนารีที่กำหนด [1, 2, 3, NULL, NULL, 6, 7] ความแตกต่างของความสูงของทรีย่อยด้านซ้ายและแผนผังย่อยด้านขวาจะเท่ากับ '1' ดังนั้นจึงเป็นต้นไม้ที่มีความสูงสมดุล