1530. Number of Good Leaf Nodes Pairs
Solution
int ret = 0;
public int countPairs(TreeNode root, int distance) {
dfs(root, distance);
return ret;
}
public Map<Integer, Integer> dfs(TreeNode node, int distance){
Map<Integer, Integer> result = new HashMap<>();
if(node == null) return result;
if(node.left == null && node.right == null){
result.put(1,1); //遞迴時的處理,可以給予最初始的狀態,之後的狀態會透過初始狀態去推演出來,而不需要設計通則
return result;
}
Map<Integer, Integer> left = dfs(node.left, distance);
Map<Integer, Integer> right = dfs(node.right, distance);
for(int leftDepth : left.keySet()){
for(int rightDepth : right.keySet()){
if(leftDepth + rightDepth <= distance){
ret += left.get(leftDepth) * right.get(rightDepth);
}
}
if(leftDepth+1 < distance){
result.put(leftDepth+1, left.get(leftDepth));
}
}
for(int rightDepth : right.keySet()){
if(rightDepth+1 < distance){
result.compute(rightDepth+1, (k,v)->{
if(v == null){
return right.get(rightDepth);
}
else{
return v + right.get(rightDepth);
}
});
}
}
return result;
}
Last updated
Was this helpful?