在Python中将值插入二进制搜索树

时间:2013-05-12 08:35:45

标签: python binary-search-tree

我正在审查我的最终问题并且其中一个练习问题要求实现一个将值放入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)))
    """

任何人都可以帮我实现这段代码,因为我不知道从哪里开始?谢谢!

2 个答案:

答案 0 :(得分:8)

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)

答案 1 :(得分:0)

树是一种非线性数据结构,树是由一组顶点和一组边创建的,平均搜索复杂度为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)

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