计算二叉树中唯一子树的数量

Counting the number of unival subtrees in a binary tree

我最近遇到了这个求二叉树中唯一子树数量的面试题。如何做到这一点?

我猜你的意思是 "Universal value sub trees" - see the description here

在这种情况下,您只需实现树的遍历,如果每个节点的所有子节点都等于父节点,则将其加 1(因为您已经确定了一个通用价值树)

int countUniVals(node* head, bool* unival) {
    if (!node) {
        *unival = true;
        return 0;
    }
    bool uniL,uniR;
    int sum = countUniVals(head->l, &uniL) + countUniVals(head->r, &uniR);
    if (uniL && uniR &&
        (!head->l || head->l->val == head->val) && 
        (!head->r || head->r->val == head->val)) {
        sum++;
        *unival = true;
    }
    return sum;
}