2014-03-19 295 views
1

我有一个二叉搜索树数据结构类,它保存的是类似二叉查找树的类中的对象。二叉搜索树的打印级别

这个类太长了,不能在这里发布,但基本上这是它的工作原理。 如果我想打印BST的顶值,我会说

print (self._root) 

如果我想移动到树(同样与去正确的左侧,只是把右而不是左),我会说

print (self._root._left) 

我希望这是足以让你能帮助我与我的问题

所以到了我的问题,如果我有一个像BST:

 6 
    /\ 
    3 8 
/\ \ 
    1 4 10 

我希望能够打印出:

6 

3 
8 

1 
4 
10 

我写了一个递归遍历功能:

def traverse(self): 

     a = [] 
     self._traverse_aux(self._root, a) 
     return a 

def _traverse_aux(self, node, a): 

     if node is not None: 
      self._traverse_aux(node._left, a) 
      a.append(node._value) 
      self._traverse_aux(node._right, a) 
     return 

如何过,这个打印在单个阵列中的值:

[1, 3, 4, 6, 8, 10] 

我怎样才能得到它打印我想要的方式?

+0

可能的重复[打印BFS(二进制树)级别顺序与\ _specific格式\ _](http://stackoverflow.com/questions/1894846/printing-bfs-binary-tree-in-level-order-与特定格式化) – lennart

回答

0

理想情况下,您将要递归回答这个问题。这种类型的遍历特别被称为宽度优先。 Here是关于遍历二叉搜索树的一些注释,虽然它们在java中,但它可能对您有用。

Here也是一个非常相似(可能是重复)的问题,虽然与递归解决它相反,使用循环给出了一个解决方案。