#python-3.x #binary-search-tree
Вопрос:
Это моя функция для возврата максимального элемента левого поддерева и минимального элемента правого поддерева
def Max(root):#this will return maximum element of left subtree
if root.left and not root.right:
return root.data
if root.right:
Max(root.right)
else:
Max(root.left)
def Min(root):#this will return minimum element of right subtree
if not root.left and not root.right:
return root.data
if root.left:
Min(root.left)
else:
Min(root.right)
def InorderPreSuc(root):
pre=Max(root.left)
suc=Min(root.right)
print(' predecessor {} and successor {}.format(pre,suc))
Но моя функция не возвращает значения, почему?
Ответ №1:
Максимумом левого поддерева будет нахождение максимума в root.left, аналогично минимумом правого поддерева будет минимум root.right
Чтобы рекурсивно найти минимум или максимум:
# Max of a BST would be its rightmost element
def Max(root):
if root.right is not None:
Max(root.right)
return root.data
# Min of BST would be its leftmost element
def Min(root):
if root.left is not None:
Min(root.left)
return root.data
Теперь, чтобы найти максимум левого поддерева, вызовите Max(root.left).
Мы можем добавить еще одну проверку на нулевое значение в случае, если корень равен нулю.
def Min(root):
if root is None:
return float("-inf")
if root.left is not None:
Min(root.left)
return root.data
Комментарии:
1. можете ли вы сказать мне, что не так с моим кодом, потому что, если я использую инструкцию print внутри функции, необходимый вывод получается, но он не возвращает значение, что я имею в виду, если я печатаю root. данные внутри функции max и min я получаю вывод, но функция их не возвращает
2. Учитывая мою реализацию, нет никакой разницы, печатаете вы значение или возвращаете его. Функция рекурсивно переходит к крайнему левому (или крайнему правому дочернему элементу), что дает нам узел с минимальным (или максимальным) значением, содержащим узел. Затем вы можете делать с этим узлом все, что пожелаете — печатать его, возвращать, менять местами, увеличивать/уменьшать. Важная часть состоит в том, чтобы перейти к крайнему левому или крайнему правому дочернему элементу, чтобы получить нужный узел.