2017-05-12 4 views
0

그럼이 한 가지 질문은 LeetCode에서 나온 것입니다. 문제는 트리의 마지막 레벨에서 가장 왼쪽 노드를 찾는 것입니다. 나는 각 레벨의 첫 번째 요소를 추적하기위한 하나의 여분의 포인터를 유지함으로써 간단한 레벨 순서 순회를 사용하여 시도했다. (물론 가장 왼쪽 요소 일 것이다.)이진 트리 레벨 순서 순회 LeetCode

코드가 내 컴퓨터에서 완벽하게 실행되는 동안. 그것은 leetcode 판사의 다른 출력을 보여줍니다. 올바른 출력이 1

동안 여기에 질문을 방문 주어진 테스트 케이스를 들어 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] 내 코드는 출력 0을주고있다

도움을 주시면 감사하겠습니다. 이 시점에서

답변

3

:

if(q.front()!=NULL) 

큐에있는 일이 있는지 알 수 없습니다. q.front()을 사용하기 전에 wirth q.empty()을 테스트해야합니다. 따라서 프로그램은 정의되지 않은 동작을 나타냅니다.

관련 문제