C语言二叉树比较代码编译报错:invalid operands to binary != 求助
编译错误原因
错误行} else if (arv1->item != arv2->item) {触发编译失败,核心原因是C语言不支持直接用关系运算符(如!=、==)比较自定义结构体实例。ITEM是你定义的结构体类型,编译器无法自动判断两个结构体是否相等,必须手动指定比较逻辑。
修复方案
方案1:复用已实现的itensIguais函数
你已经定义了判断两个ITEM是否相等的函数itensIguais,直接取反即可判断不等:
} else if (!itensIguais(arv1->item, arv2->item)) {
这种方案的优势是扩展性强——如果后续ITEM结构体新增字段,只需要修改itensIguais函数的实现,无需改动所有比较逻辑。
方案2:直接比较结构体成员
如果不想调用函数,也可以直接比较结构体中用于判断相等的核心字段chave:
} else if (arv1->item.chave != arv2->item.chave) {
修复后的完整iguais函数示例(方案1)
bool iguais(ARVORE_BINARIA *arv1, ARVORE_BINARIA *arv2) { if (arv1 == NULL && arv2 == NULL) { return true; } else if (arv1 == NULL || arv2 == NULL) { return false; } else if (!itensIguais(arv1->item, arv2->item)) { return false; } else { bool esquerda_iguais = iguais(arv1->esq, arv2->esq); bool direita_iguais = iguais(arv1->dir, arv2->dir); return esquerda_iguais && direita_iguais; } }
内容的提问来源于stack exchange,提问作者ewrt86
相关产品推荐
相关产品推荐

