我对Python有点新手,需要帮助解决我面临的问题。我正在尝试制作二叉搜索树。我编写了一个代码并且它可以工作,但不会显示任何结果(打印值)。我无法弄清楚问题可能是什么。这是整个代码:
class Node:
def __init__(self, value):
self.value = value
self.left_child = None
self.right_child = None
class binary_search_tree:
def __init__(self):
self.root_node = None
def insert(self, value, curr_node):
if self.root_node == None:
self.root_node == node(value)
elif self.root_node < value:
if self.right_child == None:
self.right.child = value
else:
curr_node == self.right_child
if curr_node < value:
curr_node.right_child = node(value)
elif curr_node > value:
curr_node.left_child = node(value)
else:
print("Error! Value Already Exists!")
elif self.root_node > value:
if self.left_child == None:
self.left.child = value
else:
curr_node == self.left_child
if curr_node < value:
curr_node.right_child = node(value)
elif curr_node > value:
curr_node.left_child = node(value)
else:
print("Error! Value Already Exists!")
else:
print("Error! Value Already Exists!")
def fill_Tree(tree, num_elems = 100, max_int = 1000):
from random import randint
for x in range (num, elems):
curr_elem = randint(0, max_int)
tree.insert(curr_elem)
return tree
我已经创建了一个Node类来处理节点和一个有助于插入值的函数插入。它检查根节点。如果它在那里,它会根据值移动到叶子上。如果不是,则将值添加为根。程序继续检查值和节点及其差异(小于,大于等),只是树的运行方式。程序执行,但没有任何显示。不知道我做错了什么。
任何形式的帮助都将不胜感激!
感谢。
答案 0 :(得分:0)
如果这是您的整个代码,并且输入和执行完美,则不会显示任何结果,因为您没有打印任何结果。
您没有明显的主要功能来创建createApolloClient
的对象。
只有在出现错误时,您的打印语句才会。如果一切正常,您的代码不会打印任何内容
您需要一个可以显示树
答案 1 :(得分:0)
目前,您的插入方法是为 root 的左子项或右子项分配值,而不是超出这两个节点的深度,如果值小于左子节点或大于找到合适的孩子。相反,创建一个类来存储value,left和right child,以及必要的插入方法。要确定树中是否存在值,将dockcross/linux-armhf7
与递归一起使用会更清晰:
__getitem__
运行:
def check_val(f):
def wrapper(cls, _val):
if _val in cls.__class__.seen:
raise ValueError(f"'{_val}' already in '{cls.__class__.__name__}'")
return f(cls, _val)
return wrapper
class Tree:
seen = []
def __init__(self, value=None):
self.left = None
self.value = value
self.right = None
def __lt__(self, _node):
return self.value < getattr(_node, 'value', _node)
@check_val
def insert_val(self, _val):
if self.value is None:
self.value = _val
self.__class__.seen.append(_val)
else:
if _val < self.value:
if self.left is None:
self.left = Tree(_val)
Tree.seen.append(_val)
else:
self.left.insert_val(_val)
else:
if self.right is None:
self.right = Tree(_val)
Tree.seen.append(_val)
else:
self.right.insert_val(_val)
def __getitem__(self, val):
if self.value == val:
return True
if val < self.value:
return getattr(self.left, '__getitem__', lambda _:False)(val)
return getattr(self.right, '__getitem__', lambda _:False)(val)
@classmethod
def load_tree(cls, size = 10):
_t = cls()
import random
for _ in range(size):
_t.insert_val(random.randint(1, 100))
return _t
输出:
t = Tree.load_tree()
print(t.__class__.seen)
#[82, 94, 33, 59, 73, 72, 96, 14, 58, 67]
for i in t.__class__.seen:
assert t[i]
print('all cases passed')