2017-05-12 2 views
0

Eh bien, cette question vient de LeetCode. La question est de trouver le nœud le plus à gauche du dernier niveau de l'arbre. Je l'ai essayé en utilisant une simple traversée d'ordre de niveau en gardant un pointeur supplémentaire pour suivre le premier élément de chaque niveau (ce qui sera bien sûr l'élément le plus à gauche). Alors que le code fonctionne parfaitement bien sur ma machine. Il montre une sortie différente dans le juge leetcode. Voici mon codeBinary Tree Level Ordre Traversal LeetCode

int findBottomLeftValue(TreeNode* root) { 
queue<TreeNode*>q; 
q.push(root); 
q.push(NULL); 
TreeNode*first; 

while(!q.empty()) 
{ 
    TreeNode*temp = q.front(); 
    q.pop(); 
    if(temp==NULL) 
    { 
    if(q.front()!=NULL) 
     first = q.front(); 
    if(!q.empty()) 
     q.push(NULL); 
    } 
    else 
    { 
     if(temp->left) 
     { 
     q.push(temp->left); 
     } 
     if(temp->right) 
     { 
     q.push(temp->right); 
     } 
    } 
    } 
    return first->val; 
} 

Pour une analyse détaillée de la visite de question https://leetcode.com/problems/find-bottom-left-tree-value/#/description

Pour le cas de test donné [2,1,3] mon code donne la sortie 0 alors que la sortie est correcte 1.

Toute aide est appréciée.

Répondre

3

A ce moment:

if(q.front()!=NULL) 

vous ne savez pas s'il y a quelque chose dans la file d'attente. Vous devriez tester Wirth q.empty() avant d'utiliser q.front(). Votre programme présente donc un comportement indéfini.