2014-03-19 292 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也是一個非常相似(可能是重複)的問題,雖然與遞歸解決它相反,使用循環給出了一個解決方案。