Следующий код не выполняет if
часть ... при первом вызове level
является 0
и view.size() - 1
является -1
, но вариант else
выбран вместо ..Сравнение странное поведение
vector<int> rightSideView(TreeNode* root) {
vector<int> solution;
createView(root, solution, 0);
return solution;
}
void createView(TreeNode* root, vector<int>& view, int level) {
if(root == NULL)
return;
if(level > view.size() - 1) {
view.push_back(root->val);
}
else {
// only this part is executed
view[level] = root->val;
}
createView(root->left, view, level + 1);
createView(root->right, view, level + 1);
}
Корень не NULL
.. действительно, если я поставлю сообщение в скобке else
, и у меня есть n узлов, он будет печатать n раз. В чем причина этого странного поведения?
Вы должны получили предупреждение о подписал против знака сравнения ... * "view.size() - 1 -1" *, нет, это было бы быть очень большим числом. – Jarod42
@ Jarod42 Я использую онлайн-платформу, поэтому я ничего не знал о таких предупреждениях. – gigiman
Используйте 'static_cast (view.size()) - 1'. –
Jarod42