Der folgende Code führt nie den if
Teil ... beim ersten Aufruf level
ist 0
und view.size() - 1
ist -1
, aber die else
Option wird stattdessen gewählt ..Vergleich merkwürdiges Verhalten
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);
}
Die Wurzel ist nicht NULL
.. eigentlich, wenn ich eine Nachricht in die else
Klammer setzen und ich n Knoten habe, wird es n mal drucken. Was ist der Grund für dieses seltsame Verhalten?
Sie bekam Warnung sollte etwa im Vergleich zu unsigned Vergleich unterzeichnet ... * "view.size() - 1 -1" *, nein, es würde sei eine sehr große Zahl. – Jarod42
@ Jarod42 Ich benutze eine Online-Plattform, daher wusste ich nichts über solche Warnungen – gigiman
Verwenden Sie 'static_cast (view.size()) - 1'. –
Jarod42