Найти элементы на заданном расстоянии в дереве - PullRequest
1 голос
/ 09 марта 2020

У меня есть дерево, которое в качестве определенных элементов, у меня есть метод, по сути, возвращает список элементов, которые находятся на расстоянии.

Пример

enter image description here

В приведенном выше дереве, когда у меня есть метод, я должен иметь возможность вводить данные и расстояние. Допустим, вводимые мной данные равны 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; 
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...