聘我网

新概念招聘3.0

为何这个宏的展开结果是0而不是1?

vote up0vote downstar
((((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))

其中base->leftNULL,而base->right->height0

我怎么算都应该是1。。

这个表达式是这么来的:

#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)

其中base->right的类型是:

typedef struct binary_tree_node
{
    struct binary_tree_node *left;
    struct binary_tree_node *right;
    struct binary_tree_node *parent;
    uint32_t ksiz;
    uint32_t vsiz;
    uint32_t vsiz_remain;
    uint32_t height;
} t_binary_tree_node;
 

1 个答复

vote up0vote downcheck

确实是0

原因是:

-1 > (uint32_t)0

布尔值为true

因为这里-1会被提升为uint32_t

也就是0xFFFFFFFF

链接

您的回答





不是您要找的问题? 浏览其他含有标签 的问题或者 自己问个.