2013-04-14 2 views
0

각 노드의 수준을 찾는 방법을 알고 싶습니다. 그러나 나는 그것을 알아낼 수 없다.수준별 트리 탐색 수준을 확인하려면

다음은 코드 섹션의 일부이지만 수정해야합니다.

if(root == NULL) 
return; 
q.enqueue(root); 
while(!queue.empty()){ 
queue.dequeue(cur); 
if(cur != NULL){ 
    cout<<cur->data<<" "; 
    if(cur->left != NULL) 
    queue.enqueue(cur->left); 
    if(cur->right != NULL) 
    queue.enqueue(cur->right); 
    } 
} 

각 노드의 레벨을 알 수 있도록 코드를 수정하는 방법은 무엇입니까? 여러분이이 질문에 대한 알고리즘을 제공 해줄 수 있기를 바랍니다.

+1

나는 이렇게 태그를 붙였습니다. – Cratylus

+0

지금까지 해보신 것은 무엇입니까? - [WhatHaveYouTried.com] (http://www.whathaveyoutried.com) –

답변

2

정확한 방향으로 진행되는 레벨 순회 중입니다. 어떤 레벨을 인쇄해야하는지 알고 싶다면 :

if(root == NULL) 
    return; 
int level = 1; 
q.enqueue(root); 
q.enqueue(NULL);  
while(!queue.empty()){ 
queue.dequeue(cur); 
if(cur == NULL){ 
    //going to next level 
    level++;  
    if(queue.empty()){ 
     break; 
    } 
    queue.enqueue(NULL); 
}  
else { 
    cout << "LEVEL is: " << level; 
    cout<<cur->data<<" "; 
    if(cur->left != NULL){ 
     queue.enqueue(cur->left); 
    } 
    if(cur->right != NULL){ 
     queue.enqueue(cur->right); 
    } 
}  
} 
+0

작동시키기 위해 q.enqueue (NULL)을 사용해야하는 이유는 무엇입니까? – Davy

+0

'NULL'을 사용하여 각 레벨의 끝을 나타냅니다. – Cratylus

+0

+1 까다로운 NULL! – Chasefornone