здесь base->left
равно NULL
, а base->right->height
равно 0
:
((((base->left ? base->left->height : -1)) > ((base->right ? base->right->height : -1)))
?
((base->left ? base->left->height : -1) + 1)
:
((base->right ? base->right->height : -1) + 1))
IMO результат вышеприведенного выражения должен быть 1
,
, нополучается, что 0
когда я его распечатываю.
Кто-нибудь знает причину?
Это ошибка в gcc 4.3.2?
ОБНОВЛЕНИЕ
как получается выражение?
#define MAX_PLUS_1(a, b) (((a) > (b)) ? (a + 1) : (b + 1))
#define BINARY_TREE_HEIGHT(node) (node ? node->height : -1)
#define BINARY_TREE_SYN_HEIGHT(left, right) \
MAX_PLUS_1(\
BINARY_TREE_HEIGHT(left),\
BINARY_TREE_HEIGHT(right)\
)
это действительно BINARY_TREE_SYN_HEIGHT(base->left, base->right)
И проблема исчезнет, если я заменим MAX_PLUS_1
на функцию:
int MAX_PLUS_1(int a, int b){
return (((a) > (b)) ? (a + 1) : (b + 1));
}