我需要一些帮助解决这个问题。
我有一个二叉树结构,它显示了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 :(得分: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;
}
我不确定我是否理解你的问题,但这应该会给你一个想法。