【问题标题】:Inserting a value into a Binary Search Tree in Python在 Python 中将值插入二叉搜索树
【发布时间】:2013-05-06 12:20:05
【问题描述】:

我正在复习我的期末考试,其中一个练习题要求实现一个函数,该函数将一个值放入 Python 中的二叉搜索树中。这是我正在使用的 Tree 实现。

class Tree(object):
    def __init__(self, entry, left=None, right=None):
        self.entry = entry
        self.left = left
        self.right = right

这里是我需要填写的函数。

def insert(item, tree):
    """
    >>> t = Tree(5, Tree(1, None, Tree(4)), Tree(7, Tree(6), Tree(8)))
    >>> insert(2, t)
    >>> t
    Tree(5, Tree(1, None, Tree(4, Tree(2), None)), Tree(7, Tree(6), Tree(8)))
    """

谁能帮我实现这段代码,因为我不知道从哪里开始?谢谢!

【问题讨论】:

标签: python binary-search-tree


【解决方案1】:

树是一种非线性数据结构。树是由一组顶点和一组边创建的。平均搜索复杂度为 logn 。让我们考虑如何将值插入树。 首先,您将创建一个 Vertices。另一种方式,您将创建节点。然后,创建的那些节点以分层方式插入。在创建 Node 类时,您可以在构造函数中初始化 Node 类的所有属性。实际上就像这个,

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

一开始,Node的data=data,Node的左孩子是None,Node的右孩子是None。然后,你可以使用这些创建的节点创建一个二叉搜索树。

class tree:

     def __init__(self):
           self.root=None

     def insert(self,data):
           if(self.root==None):
                  self.root=Node(data)
           else:
                  self._insert(data,self.root)


     def _insert(self, data, curNode):
           if(curNode.data>data):
                  if(curNode.left==None):
                         curNode.left=Node(data)

                  else:
                         self._insert(data,curNode.left)
           else:
                   if(curNode.right==None):
                         curNode.right=Node(data)
                   else:
                         self._insert(data,curNode.right)

首先在树类的构造方法下初始化根节点,然后使用insert函数插入节点。使用任意树的遍历方法都可以打印树的元素。我想,你可以理解。谢谢!

【讨论】:

    【解决方案2】:
    def insert(item, tree):
        if (item < tree.entry):
            if (tree.left != None):
                insert(item, tree.left)
            else:
                tree.left = Tree(item)
        else:
            if (tree.right != None):
                insert(item, tree.right)
            else:
                tree.right = Tree(item)
    

    【讨论】:

    • 谢谢!这正是我一直在寻找的。我想我对 tree.left = Tree(item) 和 tree.right = Tree(item) 部分感到困惑。我不完全理解如何插入它;但是,我知道如何通过它进行递归。
    猜你喜欢
    • 2012-04-24
    • 1970-01-01
    • 1970-01-01
    • 2020-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多