2014-02-26 135 views
-1

這是我迄今爲止的代碼,它只是查找整個樹的深度。我如何找到只有一個節點值(項目)的深度?查找二叉樹中特定節點的深度

Template <typename T> 
int stree<t>::nodeLevel(const T& item) 
{ 
int depthLeft, depthRight, depthval; 

if (t==NULL) 
depthval = -1; 

else 
{ 
depthLeft = depth(t->left); 
depthRight = depth(t->right); 
depthval = 1+(depthLeft > depthRight ? DepthLeft : depthRight); 
} 
return depthval; 
} 
+1

那麼我會開始修復這個錯字。否則,就像你爲T實現'find'一樣執行,但是計算遞歸級別而不是看你是否找到它。 – Xarn

+0

'if(t == NULL)depthval = 0;'如果樹是空的,樹的高度將是0而不是-1 ..... – HadeS

+0

那段代碼不會編譯。 'Template'? 'T'和't'?比較中使用模板類型的可能用途? –

回答

0

當您遍歷樹時,可以計算深度。如果您從深度爲0或1的頂部(根節點)開始(取決於您對底座的真實定義),那麼您將增加深度數,每次必須向下移動到左側或右側節點,並且每次移回到該特定節點父節點時遞減。

+0

也許最好將當前深度作爲參數傳遞,以便在找到該項目時返回。切斷深度維護(只需在每個分支上調用'find(ptr,item,depth + 1)'),減少錯誤空間;-) – vonbrand