考虑一下情景:
int fun(node* a, node* b){
if(a == NULL && b == NULL) return 0;
if( (a->data == b->data) && (fun(a->left) == fun(b->left)) && (fun(a->right) == fun(b->right)) return 1;
return 0;
}
如果我们遇到类似a->data != b->data
的条件,那么是否会对(fun(a->left) == fun(b->left))
和(fun(a->right) == fun(b->right))
进行递归调用,还是会直接对该条件说错?
答案 0 :(得分:2)
C使用short-circuit evaluation,因此如果fun(a->left)
评估为false,则不会调用&&
和a->data == b->data
右侧的其他函数。
答案 1 :(得分:0)
没有。只会对您指定的项目进行比较。您需要创建一个函数来对节点进行递归比较,或者比较节点结构中的多个字段。
int nodes_equal(node* a, node* b){
if ((a->data != b->data) || (a->left != b->left) || (a->right != b->right))
return 0;
return 1;
}