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)
键、值、地图大小
我期望每行地图大小值都会增加。
您的代码看起来像是进行了递归调用,以在树上进行深度优先搜索,但实际上并非如此。
因为你使用的不是普通的成员函数,而是构造函数,并且构造函数不能被递归调用。
看起来像递归的语法是创建额外的临时对象,这些对象将在 tge 行结束后被销毁。