/** * Definition for binary tree * class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { * val = x; * left=null; * right=null; * } * } */ public class Solution { public int solve(TreeNode A, int B) { List<Integer> ancestors = new ArrayList<>(); ancestors.add(A.val); return helper(A.left, ancestors, B) + helper(A.right, ancestors, B); }
private int helper(TreeNode A, List<Integer> ancestors, int B) { if (A == null) { return 0; } ancestors.add(A.val); int left = helper(A.left, ancestors, B); int right = helper(A.right, ancestors, B); ancestors.remove(ancestors.size() - 1);
int count = 0; for (int ancestor : ancestors) { if (Math.abs(A.val - ancestor) <= B) { count ++; } } return count + left + right; } }