使用Python中的inorder遍历(递归)打印二进制搜索树节点

时间:2017-07-14 22:59:12

标签: python recursion binary-search-tree tree-traversal inorder

我试图在二叉搜索树上实现一个简单的inorder遍历方法。

            10
          /    \
         5      15
          \
           8

我想要打印整个树,但我只打印了前3个节点。我的问题是:

- 如何修复我的'inorder'打印方法? 'insert'方法工作正常。 - inorder方法的基本条件是什么?如何知道在打印完所有节点后停止?

 class Tree:
  def __init__(self, value):
    self.node = value
    self.leftChild = None
    self.rightChild  = None

  def insert(self, value):
    if self.node is None:
        self.node = value
        return True
    if self.node is not value:
        if self.node > value:
            if self.leftChild  is None:
                self.leftChild  = Tree(value)
            else:
                return self.leftChild.insert(value)
        if self.node < value:
            if self.rightChild  is None:
                self.rightChild  = Tree(value)
            else:
                 return self.rightChild.insert(value)
    else:
        return False

  def inorder(self):
      if self:  
          if self.leftChild:
              return self.leftChild.inorder()
          print self.node
          if self.rightChild:
              return self.rightChild.inorder()


tree = Tree(10)
tree.insert(5)
tree.insert(8)
tree.insert(15)
tree.inorder()


> 5
  8
  10

1 个答案:

答案 0 :(得分:3)

return中的{p> return self.leftChild.inorder()inorder之前结束对self的调用,并且可以处理self.rightChild。删除return,该方法无论如何都不会返回任何内容。