2017-01-04 10 views
0

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?

+1

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

+0

@ Jarod42 Ich benutze eine Online-Plattform, daher wusste ich nichts über solche Warnungen – gigiman

+0

Verwenden Sie 'static_cast (view.size()) - 1'. – Jarod42

Antwort

3

view.size() - 1 würde die größte Zahl für std::size_t sein, wenn view.size()0 ist, wie es unsigned ist.

Verwenden

if (level > static_cast<int>(view.size()) - 1) { 

oder

if (level + 1 > view.size()) { 
+0

, wenn ich 'printf ("% d ", view.size() - 1);' Es druckt '-1' .. – gigiman

+0

Sie zeigen das Ergebnis zu' signiert int'. – Jarod42

+0

@gigiman "% d" sagt 'printf', um eine vorzeichenbehaftete Ganzzahl zu formatieren. Sie haben eine vorzeichenlose Ganzzahl übergeben, die "printf" falsch interpretiert, weil sie es nicht besser weiß. Einer der Nachteile von printf liegt darin, dass der Programmierer nicht darauf (zufällig oder anderweitig) über die Arten der Eingaben lügt. Bevorzugen Sie 'std :: cout', die korrekt drucken oder die Kompilierung verweigern. – user4581301

Verwandte Themen