class Node {
constructor(data) {
this
.data = data;
this
.left =
this
.right =
null
;
}
}
function
printPathUtil(node, k, path_arr, all_path_arr) {
if
(node ==
null
) {
return
;
}
let p1 = node.data.toString();
let p2 =
''
;
if
(path_arr.length > 0) {
p2 = path_arr +
','
+ p1;
}
else
{
p2 = p1;
}
if
(node.data == k) {
all_path_arr.add(p1);
}
let sum = 0;
let p2_arr = p2.split(
','
);
for
(let i = 0; i < p2_arr.length; i++) {
sum = sum + Number(p2_arr[i]);
}
if
(sum == k) {
all_path_arr.add(p2);
}
printPathUtil(node.left, k, p1, all_path_arr)
printPathUtil(node.left, k, p2, all_path_arr)
printPathUtil(node.right, k, p1, all_path_arr)
printPathUtil(node.right, k, p2, all_path_arr)
}
function
printKPath(root, k) {
let all_path_arr =
new
Set();
printPathUtil(root, k,
''
, all_path_arr);
return
all_path_arr;
}
function
printPaths(paths) {
for
(let data of paths) {
document.write(data.replaceAll(
','
,
' '
));
document.write(
'<br>'
);
}
}
let root =
new
Node(1);
root.left =
new
Node(3);
root.left.left =
new
Node(2);
root.left.right =
new
Node(1);
root.left.right.left =
new
Node(1);
root.right =
new
Node(-1);
root.right.left =
new
Node(4);
root.right.left.left =
new
Node(1);
root.right.left.right =
new
Node(2);
root.right.right =
new
Node(5);
root.right.right.right =
new
Node(2);
let k = 5;
printPaths(printKPath(root, k));