[英]binary search tree impelemntation in python
我正在尝试实现二进制搜索树,但在节点插入时遇到了一些问题。 谁能帮我指出我的python程序出了什么问题? addChild()函数未正确添加左子项(4,“ hans”)? 我的递归函数有问题吗? 提前致谢。
class Node:
def __init__(self, key = None, value = None, leftChild = None, rightChild = None, parent = None):
self.key = key
self.value = value
self.leftChild = leftChild
self.rightChild = rightChild
self.parent = parent
def get_key(self):
return self.key
def get_value(self):
return self.value
def get_leftChild(self):
return self.leftChild
def get_rightChild(self):
return self.rightChild
def set_leftChild(self, key, value):
node = Node(key, value, None, None, self)
self.leftChild = node
def set_rightChild(self, key, value):
node = Node(key, value, None, None, self)
self.rightChild = node
def isLeaf(self):
if self.leftChild is None and self.rightChild is None:
return True
else:
return False
class BinaryTree:
def __init__(self, key = None, value = None, leftChild = None, rightChild = None, parent = None):
self.root = Node(key, value, leftChild = None, rightChild = None, parent = None)
def addChild(self, key, value):
current = self.root
if current is None:
current = Node(key, value, leftChild = None, rightChild = None, parent = None)
else:
self._addChild(current, key, value)
def _addChild(self, current, key, value):
if current is None:
current = Node(key, value, leftChild = None, rightChild = None, parent = current)
return
if current.isLeaf() is True:
if current.get_key() > key:
current.set_leftChild(key, value)
else:
current.set_rightChild(key, value)
return
elif current.get_key() > key:
return self._addChild(current.get_leftChild(), key, value)
elif current.get_key() <= key:
return self._addChild(current.get_rightChild(), key, value)
def traversalInOrder(self):
if self.root is None:
return None
else:
self._traversalInOrder(self.root)
obj = BinaryTree(10, "ram")
obj.addChild(12, "hari")
obj.addChild(4, "hans")
当current is None
,您实际上并不将值存储在树中,而仅存储在局部变量中。
这样,它应该可以工作:
class BinaryTree:
def __init__(self):
self.root = None
def addChild(self, key, value):
current = self.root
if current is None:
self.root = Node(key, value, leftChild = None, rightChild = None, parent = None)
else:
self._addChild(current, key, value)
def _addChild(self, current, key, value):
if current.get_key() > key:
child = current.get_leftChild()
if child is None:
current.set_leftChild(key, value)
else:
self._addChild(child, key, value)
else:
child = current.get_rightChild()
if child is None:
current.set_rightChild(key, value)
else:
self._addChild(child, key, value)
obj = BinaryTree()
obj.addChild(10, "ram")
obj.addChild(12, "hari")
obj.addChild(4, "hans")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.