2012-06-13 101 views
-1

我需要一些幫助解決這個問題。電路的二叉樹

我有一個二叉樹結構,它顯示了2個節點「1」和「10」之間的所有路徑,如圖所示。並且節點(即邊緣)之間的互連具有一定的權重。

現在任何人都可以補充我一個算法或流程,以瞭解如何計算以下內容。

現在讓我們從 「1」 到 「10」 「a)1至2至3至10」 「b)中1至2至4至8至10」 「C)爲1〜2的路徑到4到7到10等「

現在計算完成的方式是串聯/並聯電路。

wherevr節點分支成2我需要計算的串聯電阻值

例如,如果我只考慮兩個路徑」 a)1至2至3〜10和1至2至4至8至10 「

我們可以看到在2 ..處有一個分支,所以我添加了從」2到3到10「和」2到4到8到10「的所有邊緣值,然後將這兩個和相乘,然後添加從「1到2」的值得到整體值。

這必須在整個樹上完成..任何想法如何去實現這個在C?

圖片可以在這裏找到:http://i.stack.imgur.com/PlXiT.png

+0

見http://stackoverflow.com/questions/58306/graph-algorithm-to-find-all-connections-between-two-arbitrary-vertices 廣度優先搜索 – eqzx

+0

如何1-2-4-7 -10?它不會改變你的例子計算結果嗎? – jpalecek

+0

是..這僅僅是一個例子..算法需要考慮到所有路線 – rav3451

回答

1

我認爲你要計算的樹,它是通過基於子樹值的一些計算每個節點上定義的一些深奧的價值。這並不難,使用遞歸函數:

struct node { 
    struct node* left, *right; 
    int left_weight, right_weight; /* or something*/ 
}; 

int calculate_it(struct node* root) 
{ 
    /* do the calculation */ 
    if(root->left && root->right) { 
    int l = calculate_it(root->left) + root->left_weight; 
    int r = calculate_it(root->right) + root->right_weight; 
    return l*r; 
    } else if(root->left || root->right) { 
    return root->left ? calculate_it(root->left)+root->left_weight : 
     calculate_it(root->right)+root->right_weight; 
    } 
    return 0; 
} 

我不知道我理解你的問題,但這應該給你的想法。

+0

@jpalecek ..謝謝你會看看它..並回到這.. – rav3451

+0

工程就像一個魅力..非常感謝.. .. – rav3451