class Node:
'''represents a new node in the BST'''
def __init__(self,key):
self.key=key
self.disconnect()
def disconnect(self):
self.left=None;
self.right=None;
self.parent=None;
def __str__(self):
return 'node with kay %s'%self.key
class BST:
def __init__(self):
self.root=None
def insert(self,t):
'''inserts a new element into the tree'''
self.find_place(self.root,t)
def find_place(self,node,key):
"""finds the right place of the element recursively"""
if node is None:
node=Node(key)
print node
else:
if node.key > key:
find_place(node.left,key)
else:
find_place(node.right,key)
def test():
'''function to test if the BST is working correctly'''
i wrote the above code to implement a binary search tree but the insert method is not working as expected , it fails to add even the root element . i can’t undestand the cause.
You’re not actually adding any nodes to the tree!
Its easiest to manage the adding of the root node explicitly, as you see I did below in the
insert.A
find_placefunction would, presumably from the name, return the parent node and also whether it’s the left or right slot for the key? I’ve made an explicit_do_insertfunction below that both walks and does the insert.From then on, you need to walk the tree, each time seeing if you recurse down a branch or whether you’ve reached an empty slot, where you add the new node.
It might be natural to refactor your code to put responsibility for walking the tree (and doing adds, removes and such) into the
Nodeclass.In the code below, I ignore adding a key that is already in the tree, I just silently exit: