250. Count Univalue Subtrees
1 | class Solution { |
就是让所有的node都做root. 看该tree是否能构成满足题意的subtree. 我们需要知道左右支是否是满足题意的subtree, 如果是的话值是多少. 需要考虑的一个点就是如果某个支是null, 那么我们也认为这是符合题意的, 但是它没有自己的值. 于是我们还要手动不走到node是null的情况, 如果发现某一支是null, 我们就手动记录这一支的值是当前node的val. 递归函数返回的如果是正数, 就说明该支是valid的substree并且值是这个正数, 如果不是, 那返回一个负数, 但这个数字不能等于node.val可能出现的值, 于是我们根据题目上说的node.val的范围, 直接返回-2000.
为什么会想到这个思路? 因为我们发现当只有一个node的时候, 我们是可以直接得到答案的. 于是就萌生了从leaf往上帮各个node确认自己是否为valid的substree的想法.
时间复杂度: O(n)
空间复杂度: O(n)