สมมติว่าเรามีไบนารีทรี เราต้องตรวจสอบว่าเป็นแผนผังการค้นหาแบบไบนารีหรือไม่ ดังที่เราทราบ BST มีคุณสมบัติดังต่อไปนี้ -
- โหนดทั้งหมดบนทรีย่อยด้านซ้ายมีขนาดเล็กกว่าค่าโหนดปัจจุบัน
- โหนดทั้งหมดบนทรีย่อยด้านขวามีขนาดใหญ่กว่าค่าโหนดปัจจุบัน
- คุณสมบัติเหล่านี้มีการเรียกซ้ำสำหรับโหนดทั้งหมด
ดังนั้นหากอินพุตเป็นแบบ
แล้วผลลัพธ์จะเป็น True
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- x :=รายการลำดับการข้ามผ่านขององค์ประกอบต้นไม้
- ถ้า x ถูกจัดเรียงแล้ว
- คืนค่าจริง
- คืนค่าเท็จ
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
class TreeNode: def __init__(self, data, left = None, right = None): self.data = data self.left = left self.right = right class Solution: def solve(self, root): def inorder(root,l): if root is None: return inorder(root.left,l) l.append(root.data) inorder(root.right,l) l = [] inorder(root,l) return l == sorted(l) ob = Solution() root = TreeNode(5) root.left = TreeNode(1) root.right = TreeNode(9) root.right.left = TreeNode(7) root.right.right = TreeNode(10) root.right.left.left = TreeNode(6) root.right.left.right = TreeNode(8) print(ob.solve(root))
อินพุต
root = TreeNode(5) root.left = TreeNode(1) root.right = TreeNode(9) root.right.left = TreeNode(7) root.right.right = TreeNode(10) root.right.left.left = TreeNode(6) root.right.left.right = TreeNode(8)
ผลลัพธ์
True