Возврат количества узлов в диапазоне в двоичном дереве - PullRequest
1 голос
/ 06 апреля 2020

Я пытаюсь закодировать метод, который возвращает количество узлов в двоичном дереве, которые имеют значение в диапазоне.

Вот если полный код запрашивается:

public class StaffInfo {

    final String name;
    final int monthHired;

    public StaffInfo(String name, int monthHired){
        this.name = name;
        this.monthHired = monthHired;
    }


public class StaffTree implements Iterable<StaffInfo>{
    public StaffNode root;

    public StaffTree(StaffInfo c) {
        this.root = new StaffInfo(c);
    }

    private StaffTree(StaffNode c) {
        this.root = c;
    }

class StaffNode {

        StaffInfo data;
        StaffNode senior;
        StaffNode same;
        StaffNode junior;

        public StaffNode(StaffInfo data) {
            this.data = data;
            this.senior = null;
            this.same = null;
            this.junior = null;
        }

Вот код метода, с которым у меня возникли проблемы:

public int numInRange(int monthMin, int monthMax) {

            int count = 0;

            if (monthMin > monthMax) {
                return 0;
            }

            if (root.data.monthHired >= monthMin && root.data.monthHired <= monthMax) {
                count++;
            }

            if (root.senior != null) {
                root.senior.numInRange(monthMin, monthMax);
            }
            if (root.same != null) {
                root.same.numInRange(monthMin, monthMax);
            }
            if (root.junior != null) {
                root.junior.numInRange(monthMin, monthMax);
            }
            return count;

Я имитирую офис, поэтому у каждого узла может быть дочерний элемент, который является старшим, младшим или одинаковым (определяется датой найма). monthMin и monthMax - это целые числа, представляющие количество месяцев с января 2015 года.

Когда я запускаю приведенный выше код, я получаю StackOverFlowError.

Любая помощь приветствуется!

Если проблема неясна, пожалуйста, дайте мне знать в комментариях, и я сразу же отредактирую ее.

1 Ответ

1 голос
/ 06 апреля 2020

Вы использовали root как глобальную переменную, поэтому каждый раз root вызывает его дочерний элемент. это будет происходить бесконечное время. Вам нужно передать ребенка как root в функции. тогда вы можете считать.

public int numInRange(Root root, int monthMin, int monthMax) {

            int count = 0;

            if (monthMin > monthMax) {
                return 0;
            }

            if (root.data.monthHired >= monthMin && root.data.monthHired <= monthMax) {
                count++;
            }

            if (root.senior != null) {
                root.senior.numInRange(root.senior,monthMin, monthMax);
            }
            if (root.same != null) {
                root.same.numInRange(root.same,monthMin, monthMax);
            }
            if (root.junior != null) {
                root.junior.numInRange(root.junior,monthMin, monthMax);
            }
            return count;
}

Попробуйте с этим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...