У меня есть дерево, которое в качестве определенных элементов, у меня есть метод, по сути, возвращает список элементов, которые находятся на расстоянии.
Пример
В приведенном выше дереве, когда у меня есть метод, я должен иметь возможность вводить данные и расстояние. Допустим, вводимые мной данные равны 1, а расстояние равно 2. В этом случае метод должен выводить элементы, [2,3,4], потому что я должен иметь возможность выводить данные, которые меньше или равны данному расстоянию.
Я знаю, как выводить данные, которые находятся на расстоянии 2, но я изо всех сил пытаюсь включить данные, которые включают данные, которые также находятся на расстоянии 1.
void printkdistanceNodeDown(Node node, int k)
{
if (node == null || k < 0)
return;
if (k == 0)
{
System.out.print(node.data);
System.out.println("");
return;
}
// Recur for left and right subtrees
printkdistanceNodeDown(node.left, k - 1);
printkdistanceNodeDown(node.right, k - 1);
}
int printkdistanceNode(Node node, Node target, int k)
{
if (node == null)
return -1;
if (node == target)
{
printkdistanceNodeDown(node, k);
return 0;
}
// Recur for left subtree
int dl = printkdistanceNode(node.left, target, k);
// Check if target node was found in left subtree
if (dl != -1)
{
if (dl + 1 == k)
{
System.out.print(node.data);
System.out.println("");
}
else
printkdistanceNodeDown(node.right, k - dl - 2);
// Add 1 to the distance and return value for parent calls
return 1 + dl;
}
// MIRROR OF ABOVE CODE FOR RIGHT SUBTREE
// Note that we reach here only when node was not found in left
// subtree
int dr = printkdistanceNode(node.right, target, k);
if (dr != -1)
{
if (dr + 1 == k)
{
System.out.print(node.data);
System.out.println("");
}
else
printkdistanceNodeDown(node.left, k - dr - 2);
return 1 + dr;
}
// If target was neither present in left nor in right subtree
return -1;
}