指针分配在递归函数中不起作用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了指针分配在递归函数中不起作用相关的知识,希望对你有一定的参考价值。
我有一个二叉树程序,当我尝试遍历树以在递归函数指针分配中插入时似乎不起作用。首先要做的是插入功能不起作用:
void append(Node* &curr, int val){
if(curr==nullptr){
Node* newNode = new Node(val);
std::cout << "Created new Node with value: " << newNode->value << std::endl;
curr = newNode;
return;
}
if(curr->value > val){
curr = curr->left;
append(curr, val);
}
else{
curr = curr->right;
append(curr,val);
}
}
但是当我像下面那样调整相同的功能时,它似乎正常工作:
void append(Node* &curr, int val){
if(curr==nullptr){
Node* newNode = new Node(val);
std::cout << "Created new Node with value: " << newNode->value << std::endl;
curr = newNode;
return;
}
if(curr->value > val){
append(curr->left, val);
}
else{
std::cout << "Right" << curr->value << std::endl;
append(curr->right,val);
}
}
我是在工作了几个小时后才解决此问题的,但仍然不明白为什么第一个功能无法正常工作,而第二个功能却无法正常工作。希望有人能告诉我为什么curr = curr-> left与将curr-> left传递给递归不同。
答案
在此函数实现中
void append(Node* &curr, int val){
if(curr==nullptr){
Node* newNode = new Node(val);
std::cout << "Created new Node with value: " << newNode->value << std::endl;
curr = newNode;
return;
}
if(curr->value > val){
curr = curr->left;
append(curr, val);
}
else{
curr = curr->right;
append(curr,val);
}
}
由于指针curr通过引用传递,然后在这些语句中传递
curr = curr->left;
curr = curr->right;
指针的值被覆盖。
请注意,第一个if语句可以更简单地重写而无需引入中间变量。
if ( curr == nullptr ){
curr = new Node(val);
}
以上是关于指针分配在递归函数中不起作用的主要内容,如果未能解决你的问题,请参考以下文章