#二叉树
> [!info]
> 伪回文
>
> 只要所有数字能组成回文即可
1. 深度遍历所有路径,利用位运算存储每个值出现的次数,遇到一次翻转一次该位,当遍历到叶子节点时如果是伪回文有两种情况
1. 偶数个节点,则翻转两次,对应数字的二进制位为 0
2. 奇数个节点,则应有一个为 1 的二进制位,其他位 0
```cpp
class Solution {
public:
int ans;
int pseudoPalindromicPaths(TreeNode *root) {
ans = 0;
dfs(root, 0);
return ans;
}
void dfs(TreeNode *node, int dict) {
if (!node)return;
if (!node->left && !node->right) {
dict ^= (1 << node->val);
auto t = bitset<10>(dict).count();
if (t == 0 || t == 1) {
ans++;
}
}
dfs(node->left, dict ^ (1 << node->val));
dfs(node->right, dict ^ (1 << node->val));
}
};
```