2014-11-05 53 views
0

所以我們可以說,我們有以下樹需要澄清我在哪裏錯了樹的遍歷結果

enter image description here

什麼是有序,後序,前序?

我做手動以下幾點:

按順序:WDVBYEACOGK

預購:ABDWVEYCGOK

後序:WVDYEBOKGCA

下面是我的代碼,它給:

In order:

乙d w^V E Y A C克鄰ķ

預購:

A B d w^V E Y C GØķ

後序:

乙d w^V E Y C GØK A

我必須用我的代碼有錯誤或者我在一個錯誤的方式手工做的嗎? 謝謝!

struct treenode{ 
    char c; 
    struct treenode *left; 
    struct treenode *right; 
}; 

void preOrder(struct treenode *node){ 
    if(node == NULL) return; 
    printf("%c ", node -> c); 
    preOrder(node -> left); 
    preOrder(node -> right); 
    return; 
} 


void postOrder(struct treenode *node){ 
    if(node == NULL) return; 
    preOrder(node -> left); 
    preOrder(node -> right); 
    printf("%c ", node -> c); 
    return; 
} 

void inOrder(struct treenode *node){ 
    if(node == NULL) return; 
    preOrder(node -> left); 
    printf("%c ", node -> c); 
    preOrder(node -> right); 
    return; 
} 
+1

錯字............遞歸調用自己 – BLUEPIXY 2014-11-05 22:33:33

回答

2

inOrder需要調用它自己,而不是PreOrder 。

void inOrder(struct treenode *node){ 
    if(node == NULL) return; 
    inOrder(node -> left); 
    printf("%c ", node -> c); 
    inOrder(node -> right); 
    return; 
} 

PostOrder需要自己調用,而不是PreOrder。

void postOrder(struct treenode *node){ 
    if(node == NULL) return; 
    postOrder(node -> left); 
    postOrder(node -> right); 
    printf("%c ", node -> c); 
    return; 
} 
2

你真的在問 - 爲什麼我的代碼不會發出我認爲應該的東西。答:因爲它沒有

只要按照有序

你說的應該是W.但通過代碼走它會

有序的第一個字符輸出流(root)=> preorder(root-> left),並打印root-> left.c這是B

我不知道是否inorder第一次輸出應該是B或W(我不知道足夠的樹理論)我不能提供解決方案

2

你有錯別字:

void postOrder(struct treenode *node){ 
    if(node == NULL) return; 
    postOrder(node -> left); // <-- was pre 
    postOrder(node -> right); // <-- was pre 
    printf("%c ", node -> c); 
    return; 
} 

void inOrder(struct treenode *node){ 
    if(node == NULL) return; 
    inOrder(node -> left); // <-- was pre 
    printf("%c ", node -> c); 
    inOrder(node -> right); // <-- was pre 
    return; 
}