Двоичное дерево в Java с геттерами и сеттерами - PullRequest
0 голосов
/ 27 сентября 2018

Я пытаюсь создать двоичное дерево, следуя примеру 1, где дерево создается без геттеров и сеттеров.Я хотел бы создать его с помощью гетеров и сеттеров, но я застрял на линии с рекурсией.Как я могу вызвать функцию рекурсии с / внутри сеттера?Вот код .. ps Дерево класса pastebin

public class TreeF {

Tree root;

public void insert(int value) {

    if (root==null) {

    root = new Tree(value);
        return;
    }

     Tree current = root;

    if (value < current.getData() ) {

        if (current.getLeft()==null) {
            current.setLeft(new Tree (value));
        }else {
            // call insert method inside current.left object [currrent.left(insert(value))]
            current=current.getLeft();
            insert (value);
        }

    }
    else {
        if (current.getRight()==null) {
            current.setRight(new Tree (value));
        }else {
            current=current.getRight();
            insert (value);

        }
     }  
  }

 }

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

Вам не нужно поле current или root.Вот ваш insert метод, значительно упрощенный для демонстрации.

public class Tree {
    final int data;
    Tree left;
    Tree right;

    public Tree(int value) {
        data = value;
    }

    public void insert(int value) {
        if (value < data) {
            if (left == null) {
                left = new Tree(value);
            } else {
                left.insert(value);
            }
        } else {
            if (right == null) {
                right = new Tree(value);
            } else {
                right.insert(value);
            }
        }
    }
}
0 голосов
/ 27 сентября 2018

Измените insert(value) на current.insert(value)

Чтобы реализовать рекурсию, вам нужно изменить параметр (или несколько), чтобы вы могли перейти в состояние остановки после некоторых рекурсивных вызовов.

В своем коде вы вызвали метод insert, который был частью того же объекта.И не его левое / правое поддерево.Другими словами, рекурсия никогда не заканчивается, потому что вы не посещаете дочерние поддеревья.

public class Tree {
private int data;
private Tree left;
private Tree right;

public Tree (int data) {
    this.data=data;
}

public int getData() {
    return data;
}
public void setData(int data) {
    this.data = data;
}
public Tree getLeft() {
    return left;
}
public void setLeft(Tree left) {
    this.left = left;
}
public Tree getRight() {
    return right;
}
public void setRight(Tree right) {
    this.right = right;
}

public void insert(int value) {
    if (value <  getData()) {
        if (getLeft() == null) {
            setLeft(new Tree(value));
        } else {
            getLeft().insert(value);
        }
    } else {
        if (getRight() == null) {
            setRight(new Tree(value));
        } else {
            getLeft().insert(value);
        }
    }
}
}
...