题目:
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
.
思路:
如果一个结点的左子树和右子树的值都相等,那么就算符合条件。我们可以采用深度优先搜索判断一个结点的所有子树的值是否都相等。一旦发现满足条件,就计数器+1。需要注意的是,叶子节点也算是符合条件的。
代码:
/**
* 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) {
if (!root) {
return 0;
}
int ret = 0;
dfs(root, root->val, ret);
return ret;
}
private:
bool dfs(TreeNode *root, int pre, int &ret) {
if (!root) {
return true;
}
bool flag_left = dfs(root->left, root->val, ret);
bool flag_right = dfs(root->right, root->val, ret);
if (flag_left && flag_right) {
++ret;
}
return (root->val == pre) && flag_left && flag_right;
}
};