2013-11-23 29 views
0

我對下面的代碼有問題。我需要得到父母的數量,它的價值=它的兩個孩子的總和。例如,如果父項值= 10,其子項是2和8. 那麼我必須將此父項計爲1.我需要檢查樹中的所有節點。得到等於孩子總數的父母數

this is what i tried to do: could you please advise: 


int BinaryTree::numberOfSum(){ 
return numberOfSumImpl (root); 
} 
int BinaryTree::numberOfSumImpl (BTNode *rootNode, int el){ 
    if(rootNode ==0) return 0; 
    int count=0; 
     if(rootNode->hasTwoChildren() || rootNode->isLeaf()) 
     else if{ 
      if (rootNode->info==el) return count=1; 
     return count + numberOfSumImpl(el,rootNode->left) + numberOfSumImpl(el,rootNode->right); 
     } 
} 


Many Thanks, 

回答

0

似乎有與調用numberOfSumImpl了一些問題,如在主函數它只是調用一個參數,並在遞歸函數它被稱爲有兩個參數,但與順序顛倒。這段代碼甚至沒有編譯!

此外,條件rootNode->hasTwoChildren() || rootNode->isLeaf())看起來很奇怪,並且讓它的身體變得更加奇怪。

你沒有貼BTNode的定義,但看起來你正在尋找的東西作爲

int BinaryTree::numberOfSumImpl (BTNode* p) { 
    if (not p) return 0; 
    int count; 
    if (p->hasTwoChildren() and p->info == p->left->info + p->right->info) { 
     count = 1; 
    } else { 
     count = 0; 
    } 
    return count + numberOfSumImpl(p->left) + numberOfSumImpl(p->right); 
} 

而這個功能將可能是static

+0

是的,這是我正在尋找獲得兩個孩子的總和,看看如果總數=父母的價值,然後計算它。否則返回null或零。 – user3024716