Я довольно плохо знаком со структурами данных и рекурсией. Итак, я решил попробовать и реализовать метод, который печатал бы все значения всех узлов правого поддерева (в порядке возрастания, то есть: 50, 65, 72, 91, 99) в данном дереве, как опыт обучения. ,
Вот дерево, с которым я работаю визуально.
И у меня довольно много проблем с пониманием того, как выполнить рекурсию через правильное поддерево.
Это то, что я пытался сделать до сих пор (фактический метод находится внизу):
class BinarySearchTree:
_root: Optional[Any]
# The left subtree, or None if the tree is empty.
_left: Optional[BinarySearchTree]
# The right subtree, or None if the tree is empty.
_right: Optional[BinarySearchTree]
def __init__(self, root: Optional[Any]) -> None:
"""Initialize a new BST containing only the given root value.
"""
if root is None:
self._root = None
self._left = None
self._right = None
else:
self._root = root
self._left = BinarySearchTree(None)
self._right = BinarySearchTree(None)
def is_empty(self) -> bool:
"""Return True if this BST is empty.
>>> bst = BinarySearchTree(None)
>>> bst.is_empty()
True
"""
return self._root is None
# That is what I have tried doing so far.
def print_right_subtree(self) -> None:
"""Print the right subtree in order
>>> bst = BinarySearchTree(41)
>>> left = BinarySearchTree(20)
>>> left._left = BinarySearchTree(11)
>>> left._right = BinarySearchTree(29)
>>> left._right._right = BinarySearchTree(32)
>>> right = BinarySearchTree(65)
>>> right._left = BinarySearchTree(50)
>>> right._right = BinarySearchTree(91)
>>> right._right._left = BinarySearchTree(72)
>>> right._right._right = BinarySearchTree(99)
>>> bst._left = left
>>> bst._right = right
>>> bst.print_right_subtree()
50
65
72
91
99
"""
if self.is_empty():
pass
else:
# I am not really sure what to do here...
# I have tried setting self._left = None, but that just made things even more complicated!
print(self._root)
self._right.print_right_subtree()
Любая помощь будет чрезвычайно признательна! Кроме того, если у кого-то из вас есть учебник, которому я могу следовать, это было бы здорово для новичка ie, такого как я :).