题目描述:
提交:
class Solution: def pseudoPalindromicPaths (self, root: TreeNode) -> int: def helper(l,node): left,right = 0,0 if node.left == None and node.right == None: dic = collections.Counter(l) count = 0 for i,v in dic.items(): if v %2 == 1: count += 1 if count <= 1: return 1 if node.left: l.append(node.left.val) left = helper(l, node.left) l.pop() if node.right: l.append(node.right.val) right = helper(l, node.right) l.pop() return left + right if not root: return 0 return helper([root.val],root)
优化:
# Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=None, right=None): # self.val = val # self.left = left # self.right = right class Solution: def pseudoPalindromicPaths (self, root: TreeNode) -> int: r = [0] s = set() def toggle(elem): if elem in s: s.remove(elem) else: s.add(elem) def dfs(u): if not u: return toggle(u.val) if not u.left and not u.right and len(s) <= 1: r[0] += 1 if u.left: dfs(u.left) if u.right: dfs(u.right) toggle(u.val) dfs(root) return r[0]