我想用python实现带有元素,左,右子级和父级的二进制搜索树。
class BSTNode:
""" An internal node for a BST . """
def __init__(self, item):
""" Initialise a BSTNode on creation, with value==item. """
self._element = item
self._leftchild = None
self._rightchild = None
self._parent = None
def __str__(self):
node = self
if node != None:
s = str(node._element)
if node._leftchild:
node._leftchild.__str__()
s = str(node._element)
s+= ' '
elif node._rightchild:
node._rightchild.__str__()
s += str(node._element)
else:
return s
else:
return ''
def add(self, item):
node = self
if node:
if item <node._element :
if node._leftchild is None:
node._leftchild = BSTNode(item)
node._leftchild._parent = node
else:
node._leftchild.add(item)
elif item > node._element:
if node._rightchild is None:
node._rightchild = BSTNode(item)
node._rightchild._parent = node
else:
node._rightchild.add(item)
tree = BSTNode(3);
tree.add(7);
print(tree.__str__());
我写了这个程序,但是当我运行它时,它输出None,但是它应该输出3 7(顺序是顺序遍历)。有人知道我在做什么错吗?
答案 0 :(得分:1)
您的__str__
方法不正确。具体来说,您呼叫左右两个孩子中的__str__()
,但对结果不做任何事情。另请注意,一个节点可以同时有和个左右子节点(if...elif
仅检查一个)。如果您碰到了s
或if
之一,也不会重用elif
。
您可以将其简化为:
def __str__(self):
node = self
if node != None:
s = str(node._element)
if node._leftchild:
s = node._leftchild.__str__() + s
if node._rightchild:
s += ' ' + node._rightchild.__str__()
return s
return ''