2014-12-30 48 views
1

比方說,我有身高2的一個完整的二值圖,像這樣:沖銷深度優先搜索或前序遍歷

  0 
    1  2 
    3  4 5  6 

那裏是從0到1 0的優勢和2,1到3和1到4,2到5和2到6.

我可以通過執行預定義的命令來獲得節點的深度優先搜索順序(0,1,3,4,2,5,6)命令遍歷。

是否有一些合理簡單的方法可以從預序遍歷,後序遍歷或按順序遍歷中獲得相反的結果,我的意思是在每個級別上你首先去,然後離開,這樣你最終與(0,2,6,5,1,4,3)?

我環顧了相當數量,並沒有發現任何適用。

N.B.如果你想知道爲什麼我想要它,我有一個基於DFS的搜索算法,因此比右邊的節點更快地找到比圖左側更多的節點。我正在考慮在正常的從左到右的dfs上運行並行進程,而在另一個從右到左的顛倒運行。

回答

0

在DFS中,您可以調用左邊葉子上的遞歸函數,並繼續這樣做直到不能,然後上一級調用它在右邊葉子上,然後繼續在左邊葉子上一直調用它下。

取而代之的只是左右切換,左右切換,然後可以遍歷每個右葉,並且只有在不能再遍歷右葉時才能遍歷左葉。

+0

當然,作爲DFS的算法替換,我的問題是如果你能從遍歷本身得到它的話。那有意義嗎? –

+0

恐怕我不太明白這個問題 – Dbz

+0

對不起,如果我交給你一個圖的三種常見的DFS遍歷(in,post,和pre-order),有沒有什麼方法可以獲得上面建議的「反向」DFS列表?當然,獲取正常的DFS節點列表只是預訂遍歷。 –