- 一般树的问题都是要递归去做的,而且 从头到尾都是在递归,我就不小心想成了一个半递归的问题,肯定解不出来:/
- dfs 每个父结点负责统计以它为根节点情况下,左子树和右子树的叶子结点满足条件的配对数
class Solution {
public:
int countPairs(TreeNode* root, int distance) {
dfs(root, distance);
return ans;
}
private:
int ans=0;
vector<int> dfs(TreeNode* root, int d){
if(!root) return {};
if(!root->left&&!root->right) return {1};
auto l = dfs(root->left, d);
auto r = dfs(root->right, d);
for(auto& a: l)
for(auto& b: r){
if(a+b<=d) ans++;
}
vector<int> ret;
for(auto& a: l)
if(a+1<=d) ret.push_back(a+1);
for(auto& a: r)
if(a+1<=d) ret.push_back(a+1);
return ret;
}
};