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);
    }
}

しかし残念なことに、それはうまく機能しません。これを修正する方法を知りたいのですが、単純な間違いをしている可能性があります。あるいは、完全に間違っているかもしれません。

4

1 に答える 1

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);
    }
}
于 2012-11-28T16:29:12.410 に答える