2014-10-27 98 views
1

我目前是一名學生,他的任務涉及將二叉樹方法應用於常規樹方法。 我唯一的問題是, 我的後續順序遍歷以下一般樹是否正確? 如果是這樣,那麼我知道我的算法正在工作,我只是無法正確地得到正確的後序遍歷,我覺得並認爲網站可以提供幫助。普通樹的後序遍歷

     B 
--------------------|------------------ 
|     |     | 
A    ------D-----   ---I--- 
      |  | |  |  | 
      C  E G  H  L 
         | 
         F 

我的結果是: A C E F G d H L I B

回答

3

您的回答對我來說是正確的。

這個技巧適用於廣義樹不僅僅是二元的。

Post order traversal

看到http://en.wikipedia.org/wiki/Tree_traversal

http://www.brpreiss.com/books/opus4/html/page259.html

後序遍歷訪問根最後一次。對一棵樹進行後序遍歷:

按照給定的順序逐個遍歷每個根子樹的子樹;然後訪問根目錄 。

+0

我的結果是ACEFGDHLIB 我在後做出的圖,不使用維基百科圖 感謝驗證答案謝謝! – Mjall2 2014-10-27 05:14:56

1

感謝您在這篇文章中所寫道的圖形,但它讓我困惑,因爲它不是一個典型的二叉樹。 (有些節點有3個孩子。)

無論如何,它似乎很好。

由於維基對後序的定義(http://en.wikipedia.org/wiki/Tree_traversal#Post-order),它是正確的。

後爲了

1.Traverse左子樹。

2.遍歷右側子樹。

  1. 訪問根目錄。
+0

感謝 我明白了困境,我想澄清的是,在標題爲「一般的樹」 – Mjall2 2014-10-27 05:13:47

0

後序打印可以使用遞歸完成。你可以通過 以下的遞歸函數想像自己。在返回print()函數上面的兩個函數之後,節點正在打印。嘗試在紙上手動分析您的樹,然後您可以發現結果是正確的。最初想象這樣的遞歸函數會很困難,但是你應該能夠將可視化成爲優秀的程序員,無論如何都要嘗試一下。

void postorder(node) 
{ 
    if(node=NULL) 
     return; 
    postorder(node.left); 
    postorder(node.right); 
    print(node); 
}