2014-07-16 99 views
1

給定二叉樹,找到從葉到根的最大總和路徑。例如,在以下樹中,有三個葉子到根路徑8 - > - 2-> 10,-4 - > - 2-> 10和7-> 10。這三條路徑的總和分別是16,4和17。它們的最大值是17,最大值的路徑是7 - > 10。在二叉樹中查找從根到葉的最大總和

   10 
      /\ 
      -2 7 
     /\  
      8 -4   

這是計算從根本最高數額在給定二叉樹的任何葉子節點的功能,這個問題是問在採訪中也多次通過各種companies.I我想這個聲明LS和RS作爲靜..所以它會產生錯誤的輸出。但是當我刪除靜態關鍵字時,它會產生正確的輸出。請給我解釋一下靜態關鍵字的問題。

int roottoleafmaxsum(struct node*temp) //root will be passed as an argument 
{ 
    static int ls,rs;   //left sum and right sum 
    if(temp)      //if temp!=NULL then block will be executed 
    { 
     ls=roottoleafmaxsum(temp->left);  //recursive call to left 
     rs=roottoleafmaxsum(temp->right);  //recursive call to right 
     if(ls>rs) 
      return (ls+temp->data);   //it will return sum of ls and data 
     else 
      return (rs+temp->data);   //it will return sum of rs and data 
    } 
} 
+0

我想你應該在你的roottoleafmaxsum函數中當temp爲NULL時返回0。 – IronMan007

回答

3

靜態意味着它們將保留每個函數調用的值。 由於您正在使用遞歸,它會更改遞歸調用中的值,並且會在父函數中使用相同的值來產生錯誤。

+0

我知道,但爲什麼它在這種情況下發生?它不會產生任何錯誤。 –

+0

它不會產生錯誤,它只會產生錯誤的輸出。很明顯,如果你通過它(即使在3節點樹上),爲什麼這樣做。 – Cheruvian

+0

我不明白你想要解釋什麼。 –