<script>
let sum = 0;
class TreeNode {
constructor(data =
""
, left =
null
, right =
null
) {
this
.data = data;
this
.left = left;
this
.right = right;
}
}
function
kDistanceDownSum(root, k)
{
if
(root ==
null
|| k < 0) {
return
}
if
(k == 0) {
sum += root.data;
return
;
}
kDistanceDownSum(root.left, k - 1);
kDistanceDownSum(root.right, k - 1);
}
function
kDistanceSum(root, target, k) {
if
(root ==
null
)
return
-1;
if
(root.data == target) {
kDistanceDownSum(root.left, k - 1);
return
0;
}
let dl = -1;
if
(target < root.data) {
dl = kDistanceSum(root.left, target, k);
}
if
(dl != -1) {
if
(dl + 1 == k) sum += root.data;
return
-1;
}
let dr = -1;
if
(target > root.data) {
dr = kDistanceSum(root.right, target, k);
}
if
(dr != -1) {
if
(dr + 1 == k) sum += root.data;
else
kDistanceDownSum(root.left, k - dr - 2);
return
1 + dr;
}
return
-1;
}
function
insertNode(data, root) {
if
(root ==
null
) {
let node =
new
TreeNode(data);
return
node;
}
else
if
(data > root.data) {
root.right = insertNode(data, root.right);
}
else
if
(data <= root.data) {
root.left = insertNode(data, root.left);
}
return
root;
}
function
findSum(root, target, K) {
kDistanceSum(root, target, K, sum);
document.write(sum);
}
let root =
null
;
let N = 11;
let tree = [3, 1, 7, 0, 2, 5, 10, 4, 6, 9, 8];
for
(let i = 0; i < N; i++) {
root = insertNode(tree[i], root);
}
let target = 7;
let K = 2;
findSum(root, target, K);
</script>