指针分配在递归函数中不起作用

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);
    }

以上是关于指针分配在递归函数中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

java代码在片段活动中不起作用

Javascript代码片段在drupal中不起作用

为什么这个递归打印功能在Erlang中不起作用

onRequestPermissionsResult 在片段中不起作用

Onclicklistener 在片段列表视图中不起作用

Visual Studio 自定义代码片段在方法定义的参数列表中不起作用