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

问题描述 投票:0回答:1

我有一个二叉树程序,当我尝试遍历树以在递归函数指针分配中插入时似乎不起作用。首先要做的是插入功能不起作用:

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传递给递归不同。

c++ algorithm binary-search-tree
1个回答
1
投票

在此函数实现中

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);
    }
© www.soinside.com 2019 - 2024. All rights reserved.