您的位置:首页 > 产品设计 > UI/UE

[Leetcode] 250. Count Univalue Subtrees 解题报告

2017-06-30 16:56 579 查看
题目

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;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: