2012-11-28 90 views
1

我有一個前序遍歷功能,看起來像這樣:後順序/前序遍歷樹

void listInPreOrder(node* hd){ 
if(hd != NULL) { 
     printf("%d, ", hd->value); 
     listInPreOrder(hd->left); 
     listInPreOrder(hd->right); 
    } 
} 

,其實工作原理,但我認爲這使得它提交訂單會如這樣簡單

void listInPostOrder(node* hd){ 
if(hd != NULL) { 
     listInPreOrder(hd->left); 
     listInPreOrder(hd->right); 
     printf("%d, ", hd->value); 
    } 
} 

不過遺憾的是它不工作這麼好。我想知道如何解決這個問題,也許我正在做一些簡單的錯誤。或者,也許這是完全錯誤的。

+0

你是什麼意思? –

+0

@OstapHnatyuk,你沒有改變遞歸調用...... – StoryTeller

+0

這兩個代碼是相同的,只是將打印行轉換到底部。也嘗試發佈其他代碼,因爲很難通過函數調用來確定故障。例如。你如何構建節點... –

回答

9

你怎麼樣改變這種:

void listInPostOrder(node* hd){ 
if(hd != NULL) { 
     listInPreOrder(hd->left); // PRE order ??? 
     listInPreOrder(hd->right); // PRE order ??? 
     printf("%d, ", hd->value); 
    } 
} 

這樣:

void listInPostOrder(node* hd){ 
if(hd != NULL) { 
     listInPostOrder(hd->left); 
     listInPostOrder(hd->right); 
     printf("%d, ", hd->value); 
    } 
} 
+0

很好的... +1 – Omkant

+1

Derp,是的..當我問這樣的問題時,我覺得自己像個白癡。但是我花了10分鐘試圖理解爲什麼甚至沒有閱讀函數中的方法調用。 –

+2

@OstapHnatyuk你會(可能不會)在BST遍歷的新遞歸實現中發生這種情況的頻率。我幾天前在一個不同的問題*中回答了這個問題,所以我對這種「derp」感覺非常親密。 – WhozCraig