Если переменная node является ссылочным типом, она будет изменена с помощью std::make_pair() в условие first if, и node.first, и node. Second будут недействительны, что приведет к сбою доступа к node.first во втором условии if.
Если node имеет значение не ссылочный тип, просто копия node_vec, все работает нормально. Почему?
Код: Выделить всё
#include
#include
// 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 Solution {
public:
bool isCompleteTree(TreeNode* root) {
std::vector node_vec;
if (root == nullptr)
return true;
node_vec.push_back(std::make_pair(root, 0));
int idx = 0;
while (idx < node_vec.size()) {
const auto& node = node_vec[idx];
//const auto node = node_vec[idx];
std::cout left, idx * 2 + 1)
);
std::cout right, idx * 2 + 2));
}
++idx;
}
std::cout
Подробнее здесь: [url]https://stackoverflow.com/questions/78550168/reference-was-modified-by-stdmake-pair[/url]
Мобильная версия