[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,
return
思路:
如果一个结点的左子树和右子树的值都相等,那么就算符合条件。我们可以采用深度优先搜索判断一个结点的所有子树的值是否都相等。一旦发现满足条件,就计数器+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;
}
};
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;
}
};
相关文章推荐
- [leetcode] 250. Count Univalue Subtrees 解题报告
- LeetCode 250. Count Univalue Subtrees(单值子树)
- LeetCode 250. Count Univalue Subtrees
- Leetcode 250. Count Univalue Subtrees (Medium) (cpp)
- Leetcode 652. Find Duplicate Subtrees 寻找重复子树 解题报告
- 【LeetCode】687.Longest Univalue Path(Easy)解题报告
- [LeetCode] 250. Count Univalue Subtrees 计算唯一值子树的个数
- 【LeetCode】687. Longest Univalue Path 解题报告
- [Leetcode] 687. Longest Univalue Path 解题报告
- 【leetcode】687. Longest Univalue Path解题报告
- [Leetcode] 652. Find Duplicate Subtrees 解题报告
- [leetcode]151. Reverse Words in a String@Java解题报告
- [Leetcode] 768. Max Chunks To Make Sorted II 解题报告
- LeetCode解题报告--Remove Duplicates from Sorted Array
- [Leetcode] 659. Split Array into Consecutive Subsequences 解题报告
- 【LeetCode】Flatten Binary Tree to Linked List 解题报告
- [leetcode] 294. Flip Game II 解题报告
- [leetcode] 393. UTF-8 Validation 解题报告
- 景岁的Leetcode解题报告:297. Serialize and Deserialize Binary Tree(Python)
- Leetcode / C++ / 475. Heaters 解题报告+源代码