[Locked] Count Univalue Subtrees

计数等值子树
本文介绍了一种通过递归方法解决计数二叉树中等值子树数量的问题。等值子树定义为所有节点都具有相同值的子树。文章提供了具体的代码实现,并解释了如何判断一个子树是否为等值子树。

Count Univalue Subtrees

Given a binary tree, count the number of uni-value subtrees.

A Uni-value subtree means all nodes of the subtree have the same value.

For example:
Given binary tree,

              5
             / \
            1   5
           / \   \
          5   5   5

return 4.

分析:

  有点像自低向上的动态规划,既然是自底向上,看来用递归访问树的节点无疑可以解决问题

代码:

bool dfs(TreeNode *node, int &count) {
    if(!node)
        return true;
    //一定要让保证其先递归,达到最底层节点,然后作后续处理
    bool goodleft = dfs(node->left, count), goodright = dfs(node->right, count);
    //与左右节点值相同,且左右子树是值相同的树,则以该节点为根节点的树也是值相同的树
    if(goodleft && goodright && (!node->left || node->val == node->left->val) && (!node->right || node->val == node->right->val)) {
        count++;
        return true;
    }
    return false;
}
int count(TreeNode *node) {
    int num = 0;
    dfs(node, num);
    return num;
}

 

转载于:https://www.cnblogs.com/littletail/p/5208067.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值