深度优先搜索:直观上感觉是后序,但并不是严格的后序遍历
Python实现:注意短路效应带来的bug,比较隐蔽
class Solution:
def countUnivalSubtrees(self, root: TreeNode) -> int:
if root == None:
return 0
self.counts = 0
self.is_uni(root)
return self.counts
def is_uni(self, node: TreeNode) -> bool:
## 叶子节点
if node.left is None and node.right is None:
self.counts += 1
return True
## 非叶子节点,递归后序遍历
flag = True #flag引入很关键,我就卡在了这里,把if写的很长,不知道如何处理
if node.left is not None:
#flag = flag and self.is_uni(node.left) and node.left.val==node.val #隐蔽的Bug:flag放在前面,由于 && 运算的短路效应,一旦flag不是true,之后的递归均不会进行了...
flag = self.is_uni(node.left) and node.left.val == node.val and flag
if node.right is not None:
flag