struct node
{
int data;
node* left;
node* right;
};
int secondlargest(struct node* a)
{
while(a->right != NULL){
secondlargest(a->right);
}
return a->data;
}
どこで間違いをしたのか、なぜそれがwhileループから出てこないのかを追跡することはできません。
struct node
{
int data;
node* left;
node* right;
};
int secondlargest(struct node* a)
{
while(a->right != NULL){
secondlargest(a->right);
}
return a->data;
}
どこで間違いをしたのか、なぜそれがwhileループから出てこないのかを追跡することはできません。
あなたの間違いは、しばらく使用するべきではなく、再帰的であるため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);
}
再帰的なバージョンを主張する場合は、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;
}