[LeetCode 250] Count Univalue Subtrees
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.
DiffcultyMedium
Similar Problems
[LeetCode 333] Largest BST Subtree Medium
[LeetCode 145] Binary Tree Postorder Traversal Hard
[LeetCode 100] Same Tree Easy
Analysis
这道题让我们求相同值子树的个数,就是所有节点值都相同的子树的个数,之前有道求最大BST子树的题Largest BST Subtree,感觉挺像的,都是关于子树的问题,解题思路也可以参考一下,我们可以用递归来做,第一种解法的思路是先序遍历树的所有的节点,然后对每一个节点调用判断以当前节点为根的字数的所有节点是否相同,判断方法可以参考之前那题Same Tree,用的是分治法的思想,分别对左右字数分别调用递归
但是上面的那种解法不是很高效,含有大量的重复check,我们想想能不能一次遍历就都搞定,我们这样想,符合条件的相同值的字数肯定是有叶节点的,而且叶节点也都相同(注意单独的一个叶节点也被看做是一个相同值子树),那么我们可以从下往上check,采用后序遍历的顺序,左右根,我们还是递归调用函数,对于当前遍历到的节点,如果对其左右子节点分别递归调用函数,返回均为true的话,那么说明当前节点的值和左右子树的值都相同,那么又多了一棵树,所以结果自增1,然后返回当前节点值和给定值(其父节点值)是否相同,从而回归上一层递归调用,