/**
* This problem was asked by Google.
A unival tree (which stands for "universal value") is a tree where all nodes under it have the same value.
Given the root to a binary tree, count the number of unival subtrees.
For example, the following tree has 5 unival subtrees:
0
/ \
1 0
/ \
1 0
/ \
1 1
* */
class Node(value_: Int) {
var value = value_
var left: Node? = null
var right: Node? = null
}
class Problem_954 {
/**
* solution: check whether if unival tree:
* 1. leaf node
* 2. children node has save value
* */
fun countUnivalTree(root:Node?):Int{
return helperCount(root)
}
private fun helperCount(node:Node?):Int{
if (node == null){
return 0
}
if (node.left==null && node.right==null){
return 1
}
var count = 0
if (node.left?.value == node.right?.value){
count++
}
if (node.left!=null){
count += helperCount(node.left!!)
}
if (node.right!=null){
count += helperCount(node.right!!)
}
return count
}
}