Я пытался реализовать BST. На данный момент он добавляет только ключи в соответствии со свойством BST (Left-Lower, Right-Bigger). Хотя я реализовал это по-другому.
Вот как я думаю, что BST должны быть
Одиночное направление BST
Как я реализовал свой BST
Двунаправленный BST
Вопрос в том, является ли это правильной реализацией BST?
(Как я вижу в двухстороннем BST, было бы легче искать, удалять и вставлять)
import pdb;
class Node:
def __init__(self, value):
self.value=value
self.parent=None
self.left_child=None
self.right_child=None
class BST:
def __init__(self,root=None):
self.root=root
def add(self,value):
#pdb.set_trace()
new_node=Node(value)
self.tp=self.root
if self.root is not None:
while True:
if self.tp.parent is None:
break
else:
self.tp=self.tp.parent
#the self.tp varible always is at the first node.
while True:
if new_node.value >= self.tp.value :
if self.tp.right_child is None:
new_node.parent=self.tp
self.tp.right_child=new_node
break
elif self.tp.right_child is not None:
self.tp=self.tp.right_child
print("Going Down Right")
print(new_node.value)
elif new_node.value < self.tp.value :
if self.tp.left_child is None:
new_node.parent=self.tp
self.tp.left_child=new_node
break
elif self.tp.left_child is not None:
self.tp=self.tp.left_child
print("Going Down Left")
print(new_node.value)
self.root=new_node
newBST=BST()
newBST.add(9)
newBST.add(10)
newBST.add(2)
newBST.add(15)
newBST.add(14)
newBST.add(1)
newBST.add(3)
Редактировать: я использовал циклы while вместо рекурсии. Может кто-нибудь пояснить, почему использование циклов while вместо рекурсии является плохой идеей в данном конкретном случае и в целом?