python - 我当前的二叉搜索树实现有什么问题?最后打印树只打印根

标签 python recursion binary-search-tree

我正在尝试实现二叉搜索树的类实例,但我认为我的插入函数有问题。

节点类:

class Node:
  def __init__(self, data):
    self.data = data
    self.left = None
    self.right = None

BST 类:

class BST:
  def __init__(self):
    self.root = None

  def insert(self, node):
    def helper(current, node):
      if current is None:
        current = node
      else:
        if node.data < current.data:
          helper(current.left, node)
        elif node.data > current.data:
          helper(current.right, node)

    return helper(self.root, node)

  def inorder(self, current):
    if current:
      self.inorder(current.left)
      print(current.data)
      self.inorder(current.right)

我调用的函数:

tree = BST()
tree.root = Node(3)
tree.insert(Node(2))
tree.insert(Node(7))
tree.insert(Node(9))
tree.insert(Node(7))
tree.insert(Node(4))
tree.insert(Node(89))
tree.insert(Node(6))
tree.insert(Node(2))
tree.inorder(tree.root)

最佳答案

分配 current = node 不会编辑任何对象,它只是重新分配局部变量 current。您需要修改节点以添加子节点。试试这个:

def helper(current, node):
    if node.data < current.data:
            if (current.left is None):
                current.left = node
                return
            else:
                helper(current.left, node)
        elif node.data > current.data:
          if (current.right is None):
              current.right = node
              return
          else:
              helper(current.right, node)

关于python - 我当前的二叉搜索树实现有什么问题?最后打印树只打印根,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58173088/

相关文章:

c - 为什么这个函数在完成递归运行后返回整数 17?

matlab - 使用递归 MATLAB 函数还是优化?

C 二叉树排序 - 扩展它

python - 如何理解Class中的 `self.fields`?

python - django项目的urls.py和views.py之间的联系

Python setuptools 上传失败 (400) : Invalid URI: u'UNKNOWN'

python - 查找等于特定总和的列表部分排列的有效方法

c# - 二叉搜索树中的重复条目

c++ - 检查BST中每个节点的平衡因子并将其存储在节点中

python - 无法在带有 Airflow 的 Jinja 模板中使用 Python 变量