# 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 = rightclassSolution:defpseudoPalindromicPaths(self, root: TreeNode)->int:defdfs(root, data_dict):if root:if root.val in data_dict:
data_dict[root.val]+=1else:
data_dict[root.val]=1
mid =0ifnot root.left andnot root.right:# print(data_dict)for v in data_dict.values():if v%2:
mid +=1if mid <=1:
self.cnt +=1if root.left:
dfs(root.left, data_dict)
data_dict[root.left.val]-=1# 回溯if root.right:
dfs(root.right, data_dict)
data_dict[root.right.val]-=1# 回溯
self.cnt =0
data_dict ={}
dfs(root, data_dict)return self.cnt
Time: O(n)
Space: O(n) + O(n) – 递归占用的内存栈
解法二:位运算
n & (n - 1) 可以用来消除最后一个1
回文串只会有两种情况 要么 1221 要么 121 所以异或后,要么是0 要么是个数为奇数的数字。
1<<root.val 是把 root.val 变为
2
r
o
o
t
.
v
a
l
2^{root.val}
2root.val,
2
r
o
o
t
.
v
a
l
2^{root.val}
2root.val 和
2
r
o
o
t
.
v
a
l
−
1
2^{root.val}-1
2root.val−1 的异或结果为0,这么做是为了解决上述121的情况。