计算二叉树中单元子树的数量

时间:2015-03-16 23:37:49

标签: algorithm binary-tree

我最近遇到了这个面试问题,即在二叉树中查找单个子树的数量。怎么办呢?

2 个答案:

答案 0 :(得分:1)

我认为你的意思是"普遍价值子树" - see the description here

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

答案 1 :(得分: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;
}