2012-06-13 58 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