https://leetcode.com/problems/pseudo-palindromic-paths-in-a-binary-tree/description/
class Solution {
public:
int ans;
void dfs(TreeNode *cur, vector<int> &cnt) {
if (cur == NULL) return;
cnt[cur -> val] += 1;
dfs(cur -> left, cnt);
dfs(cur -> right, cnt);
if ((cur -> left == NULL) && (cur -> right == NULL)) {
int odd = 0;
for (auto &x: cnt) odd += x % 2;
if (odd <= 1) ans += 1;
}
cnt[cur -> val] -= 1;
}
int pseudoPalindromicPaths (TreeNode* root) {
ans = 0;
vector<int> cnt(10, 0);
dfs(root, cnt);
return ans;
}
};
這裡你們可以感受到一點 Backtracking 的感覺,也就是在往下 DFS 前我們會先做加 1 的動做,並且在回去之前會再把這個進行減 1 的動作。
Backtracking 在 top-down 的 DP 當中也算是挺常用到的技巧