struct gate
{
char name[10];
int type; //Type of the gate : INPUT,AND, OR, NOT, FLIPFLOP
int value;
char inputname1[10];
char inputname2[10];
struct gate *input1;
struct gate *input2;
};
我已经创建了一个具有结构结构的树,但是我找不到如何递归计算它的方法,您能帮忙吗?
int pre(struct gate *root) //address of root node is pass
{
if(root->input1->type==INPUT || root->input2->type==INPUT){
if(root->type == OR){
root->type = INPUT;
return root->value = gateor(root->input1->value,root->input2->value);
}
if(root->type == AND){
root->type = INPUT;
return root->value = gateand(root->input1->value,root->input2->value);
}
if(root->type==NOT){
root->type=INPUT;
return root->value = gatenot(root->input1->value);
}
if(root->type == FLIPFLOP){
root->type = INPUT;
return root->value = gateflipflop(root->input1->value,0);
}
}
pre(root->input1);
pre(root->input2);
}
我不认为递归,我希望它能起作用。
a,b,c,d是一个结构,但仅具有value,type和name。
值是1和0
门值= -1;
我不知道这些值是否必要。
答案 0 :(得分:3)
您可以像这样递归地解决它:
int pre (struct gate *root) {
if (root->type == INPUT)
return root->value; // This is the recursion end
else if (root->type == OR) {
return gateor(pre(root->input1), pre(root->input2)); // Recurse here
} else if (root->type == AND) {
return gateand(pre(root->input1), pre(root->input2));
} // Same for the other operations
}
这应该给您一个解决问题的思路。