0
int postOrder(struct node* root, char organ[], char bt[], int* val){

    if(root != NULL) {
        postOrder(root->left, organ, bt, val);
        postOrder(root->right, organ, bt, val);
        if(strcmp(root->organ.organname, organ) == 0){
            if(strcmp(root->organ.bloodtype, bt) == 0){
               if(val == 0){
                printf("%s\n", root->organ.name);
                val = 1;
                }
            }
        }
    }
}

我试图在第一次打印后立即终止这个递归函数。我最初的想法是传入一个十进制指针 'val' 并在我想终止函数时将其设置为 1。思考过程是它会更改函数外部的值,因此所有先前的调用都将具有更新的指针,但我不认为这就是它在此设置中的工作方式。

此函数通过二叉树搜索 Post Orderly。

4

3 回答 3

5

使用*val. val 只是一个指针。你想要它的价值。

于 2013-11-07T18:56:58.290 回答
1

由于当前您的函数不返回任何内容,因此您可以将其更改为1如果打印了任何内容则返回,0如果没有则返回。这样您就不需要传递val指针(无论如何您都没有正确使用)。

int postOrder(struct node* root, char organ[], char bt[]){
    if(root == NULL)  return 0;
    if (postOrder(root->left, organ, bt, val)) return 1;
    if (postOrder(root->right, organ, bt, val)) return 1;
    if (strcmp(root->organ.organname, organ) == 0 && strcmp(root->organ.bloodtype, bt) == 0) {
        printf("%s\n", root->organ.name);
        return 1;
    }
    return 0;
}
于 2013-11-07T19:01:14.713 回答
0

val 是一个指向整数的指针,因此您需要在设置或获取它的值时取消引用它。

尝试:

if(*val == 0) { *val = 1; ... }

于 2013-11-07T19:01:49.270 回答