2013-04-14 68 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

好像C++,所以我標記爲這樣。 – 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