Leetcode 250. Count Univalue Subtrees (Medium) (cpp)

本文介绍了解决LeetCode上第250题“计数单一值子树”的方法。该题要求遍历二叉树并计算其中所有节点值相同的子树数量。通过递归方式检查每个子树是否为单一值子树,并返回结果。

Leetcode 250. Count Univalue Subtrees (Medium) (cpp)

Tag: Tree

Difficulty: Medium


/*

250. Count Univalue Subtrees (Medium)

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.

*/
/**
* Definition for a binary tree node.
* struct TreeNode {
*     int val;
*     TreeNode *left;
*     TreeNode *right;
*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
	int countUnivalSubtrees(TreeNode* root) {
		int res = 0;
		cout(root, res);
		return res;
	}
private:
	int cout(TreeNode* root, int& res) {
		if (root == NULL) {
			return 0;
		}
		else if (root->left == NULL && root->right == NULL) {
			res++;
			return 1;
		}
		int l = cout(root->left, res), r = cout(root->right, res);
		if (l == 1 && r == 1) {
			if (root->val == root->left->val && root->val == root->right->val) {
				res += 1;
				return 1;
			}
		}
		else if (l == -1 || r == -1) {
			return -1;
		}
		else if (l != 0 && root->val == root->left->val) {
			res += 1;
			return 1;
		}
		else if (r != 0 && root->val == root->right->val) {
			res += 1;
			return 1;
		}
		return -1;
	}
};



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值