#二叉树 > [!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)); } }; ```