二进制树电路

时间:2012-06-13 22:30:15

标签: c algorithm binary-tree

我需要一些帮助解决这个问题。

我有一个二叉树结构,它显示了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

1 个答案:

答案 0 :(得分: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;
}

我不确定我是否理解你的问题,但这应该会给你一个想法。