【发布时间】:2020-02-16 18:39:35
【问题描述】:
我有一个二叉树程序,当我试图遍历树以插入递归函数指针赋值时似乎不起作用。首先是插入功能不起作用:
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 传递给递归不同。
【问题讨论】:
-
“不工作”不是一个好的问题描述。
-
想想
curr = newnode如何将新分配的节点返回给调用者。这与curr = curr->left有什么关系?
标签: c++ algorithm binary-search-tree