C++ unordered_map 实现问题映射中先前的值被遗忘

You*_*Who 1 c++ algorithm language-implementation

在下面的代码中,为什么地图大小始终为 1,它没有保存root->val地图中以前的值,正如我在标准输出中看到的那样。我期望它应该记住地图中放入的所有值。

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class FindElements {
public:

    unordered_map<int,int>mp;

    FindElements(TreeNode* root) {
        if(!root) return;
        if(root->val==-1){
            root->val=0;
        }
        mp[root->val]=1;
        
        // output
        cout<<root->val<<" "<<mp[root->val]<<" "<<mp.size()<<endl;
        
        if(root->left){
            root->left->val=2*(root->val)+1;
            FindElements(root->left);
        }
        if(root->right){
            root->right->val=2*(root->val)+2;
            FindElements(root->right);
        }
    }
    
    bool find(int target) {
        return mp[target];
    }
};
/**
 * Your FindElements object will be instantiated and called as such:
 * FindElements* obj = new FindElements(root);
 * bool param_1 = obj->find(target);
 */
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

输入:

["FindElements","find","find","find"]    
[[[-1,-1,-1,-1,-1]] , [1] , [3] , [5]]
Run Code Online (Sandbox Code Playgroud)

输出:

[null,false,false,false]
Run Code Online (Sandbox Code Playgroud)

预期的:

[null,true,true,false]
Run Code Online (Sandbox Code Playgroud)

标准输出:

0 1 1     
1 1 1     
3 1 1    
4 1 1    
2 1 1    
Run Code Online (Sandbox Code Playgroud)

键、值、地图大小

我期望每行地图大小值都会增加。

Leetcode问题链接

ger*_*rum 5

您的代码看起来像是进行了递归调用,以在树上进行深度优先搜索,但实际上并非如此。

因为你使用的不是普通的成员函数,而是构造函数,并且构造函数不能被递归调用。

看起来像递归的语法是创建额外的临时对象,这些对象将在 tge 行结束后被销毁。