题目描述
给定一棵二叉树,统计唯一值子树的数目.
唯一值子树意味着子树的所有节点都具有相同的值.
样例
输入: root = {5,1,5,5,5,#,5}
输出: 4
解释:
5
/ \
1 5
/ \ \
5 5 5
输入: root = {1,3,2,4,5,#,6}
输出: 3
解释:
1
/ \
3 2
/ \ \
4 5 6
分析:
1.一个root下面要为唯一值子树的话,必须满足left和right都是唯一值子树,并且,left和right必须和root相等
2.dfs的时候每次判定一个非null节点为true的话,count++,最后count就是所有唯一子树的个数
JAVA代码:
private int res;
public int countUnivalSubtrees(TreeNode root) {
dfs(root);
return res;
}
private boolean dfs(TreeNode root) {
if (root.left == null && root.right == null) {
res++;
return true;
}
if (root.left != null && root.right != null) {
boolean flag1 = dfs(root.left), flag2 = dfs(root.right);
if (flag1 && flag2 && root.val == root.left.val && root.val == root.right.val) {
res++;
return true;
}
} else if (root.left == null) {
if (dfs(root.right) && root.val == root.right.val) {
res++;
return true;
}
} else if (root.right == null) {
if (dfs(root.left) && root.val == root.left.val) {
res++;
return true;
}
}
return false;
}