【发布时间】:2018-11-19 17:38:39
【问题描述】:
在下面的代码中,我使用 std::map&myMap 作为参考
我正在使用地图值 dataNode 来更新 start_time 和 end_time 的值,但我看到这些值没有更新,我得到了
当我打印时在 widthOfBinaryTree 中打印
0 2147483647 -2147483648
1 2147483647 -2147483648
2 2147483647 -2147483648
为什么 start_time 和 end_time 的值不会在树的每一层都更新。
class Solution {
public:
typedef struct dataNode
{
int start_time =INT_MAX;
int end_time = INT_MIN;
};
int widthOfBinaryTreeRecursion(TreeNode* root, int level, int sideLevel, bool left, std::map<int ,dataNode>&myMap)
{
if(root == nullptr)
{
return 0 ;
}
auto element = myMap[level];
widthOfBinaryTreeRecursion(root->left , level+1 , sideLevel*2 , true ,myMap);
if(left && sideLevel < element.start_time)
{
cout << "start" << " " <<element.start_time << " " << sideLevel << " " <<root->val <<" " << level <<endl;
element.start_time = sideLevel;
}
if(!left && sideLevel > element.end_time)
{
cout <<"end" <<" " << element.end_time << " " << sideLevel << " " <<root->val <<" " << level <<endl;
element.end_time = sideLevel;
}
widthOfBinaryTreeRecursion(root->right, level+1 ,sideLevel*2+1, false, myMap);
return 0;
}
int widthOfBinaryTree(TreeNode* root)
{
std::map<int , dataNode>myMap;
widthOfBinaryTreeRecursion(root, 0, 1, true,myMap);
for(auto itr : myMap)
{
cout << itr.first <<" " << itr.second.start_time << endl;
}
return 0;
}
};
【问题讨论】:
标签: c++11 recursion stl stdmap