Mam pytanie wywiad praktyka, która mówi mi, aby sprawdzić, czy drzewo jest zrównoważony drzewo wyszukiwania lub nie i dać metodę weryfikacji ... Mam klasę jakoSprawdzanie, czy drzewo jest BST lub nie Python
Class Node:
def __init__(self, k, val):
self.key = k
self.value = val
self.left = None
self.right = None
i inne definicje funkcji w drzewie maksymalnej i wartości min jako
def tree_max(node):
maxleft = float('-inf') if not node.left else tree_max(node.left)
maxright = float('-inf') if not node.right else tree_max(node.right)
return max(node.value, maxleft, maxright)
def tree_min(node):
minleft = float('-inf') if not node.right else tree_min(node.left)
minright = float('-inf') if not node.left else tree_min(node.right)
return min(node.value, minleft, minright)
My metoda weryfikacji, jak
def verify(node):
if tree_max(node.left) <= node.value and node.value <= tree_min(node.right):
if verify(node.left) and verify(node.right):
return True
else:
return False
else:
return False
Mój problem występuje, gdy próbuję wdrożyć metodę weryfikacji, wydaje się, że zawsze otrzymuję fałsz, nawet gdy próbuję utworzyć drzewo BST. Moje wdrożenia jest w następujący sposób:
root= Node(10, "Hello")
root.left = Node(15, "Fifteen")
root.right= Node(30, "Thirty")
print verify(root)
root = Node(10, "Ten")
root.right = Node(20, "Twenty")
root.left = Node(5, "Five")
root.left.right = Node(15, "Fifteen")
print verify(root)
Oba dają mi fałsz ... Czy jest jakiś problem z moją funkcją weryfikacji lub mój min/max funkcji ... Każda pomoc będzie mile widziane.
Czy drzewo powinno być zbalansowane, czy nie? Ponieważ zazwyczaj BST = * Binarne * drzewo wyszukiwania, a nie * Zbalansowane * drzewo wyszukiwania. Twój algorytm nie wydaje się sprawdzać, czy drzewo jest zbalansowane ... – Bakuriu
Myślę, że problem jest związany z faktem, że 'node.value' jest ciągiem i używasz' float ('- inf') 'as sentinel . – Bakuriu