2017-05-12 9 views
0

まあ、この1つの質問はLeetCodeのものです。問題は、ツリーの最後のレベルの最も左のノードを見つけることです。私は、各レベルの最初の要素を追跡するために1つの余分なポインタを保持することで、単純なレベルのオーバトラバーサルを使用して試しました(もちろん、最も左の要素です)。バイナリツリーレベル順序トラバーサルLeetCode

コードは私のマシン上で完璧に動作しますが、これは、リートコード裁判官の異なる出力を示しています。正しい出力が1

ている間に私のコードは出力0を与えている。ここに私のコードは、与えられたテストケースについては、質問を訪問 https://leetcode.com/problems/find-bottom-left-tree-value/#/description

の詳細な分析のために

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; 
} 

ある[2,1,3]

何か助けていただければ幸いです。この時点で

答えて

3

if(q.front()!=NULL) 

キュー内に何があるかどうかがわかりません。 q.front()を使用する前にwirth q.empty()をテストする必要があります。したがって、プログラムは未定義の動作を示しています。