无限循环:进程无法正常终止

时间:2011-03-04 01:35:59

标签: infinite-loop binary-search-tree

struct node
{
    int data;
    node* left;
    node* right;
};

int secondlargest(struct node* a)
{
    while(a->right != NULL){
        secondlargest(a->right);
    }
    return a->data;
}

我无法追踪我在哪里犯了错误以及为什么它不会从while循环中出来。

2 个答案:

答案 0 :(得分:1)

你的错误是你不应该使用一段时间,而是一个if因为它是递归的,但是你希望函数返回什么?最后一个成员的数据?如果是这样的话应该是这样的:

int secondlargest(struct node* a) {
   if(a == NULL) return -1;
   secondlargestr(a);
}

int secondlargestr(struct node* a) {
   if(a->right!=NULL) return secondlargest(a->right);
   return (a->data);
}

答案 1 :(得分:0)

如果您坚持使用递归版本,请将while更改为if。

int secondlargest(node* a)
{
    if(a == null){
        // if the first node is already NULL
        return -1;
    }
    if(a->right == NULL){
        return a->data;
    }else{
        return secondlargest(a->right);
    }
}

递归的基础知识:

  • 必须有基本案例
  • 递归地分解问题大小

如果你想要迭代的方式:

int secondlargest(node* a)
{
    node* temp = a;
    int data = -1;
    while(temp != null){
        data = temp->data;
        temp = temp->right;
    }
    return data;
}