二进制搜索树(Python)没有显示结果

时间:2018-06-10 14:43:32

标签: python binary-search-tree

我对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类来处理节点和一个有助于插入值的函数插入。它检查根节点。如果它在那里,它会根据值移动到叶子上。如果不是,则将值添加为根。程序继续检查值和节点及其差异(小于,大于等),只是树的运行方式。程序执行,但没有任何显示。不知道我做错了什么。

任何形式的帮助都将不胜感激!

感谢。

2 个答案:

答案 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')